, scanf("%s %s %s", first, middle, last);
3 개 부분을 입력해야하고 사용자 유형들을 때까지 기다리는 것으로 기대하고있다.
당신은 fgets()
으로 입력 라인을 읽고 sscanf
와 이름 부분에 대한 것을 검색하고 변환 얼마나 많은 부품을 계산하려면 : 이름은 실제 생활에서 좀 더 다양한 될 수
#include <stdio.h>
int main(void) {
char first[32], middle[32], last[32];
char line[32];
printf("Enter full name: ");
fflush(stdout); // make sure prompt is output
if (fgets(line, sizeof line, stdin)) {
// split the line into parts.
// all buffers have the same length, no need to protect the `%s` formats
*first = *middle = *last = '\0';
switch (sscanf(line, "%s %s %[^\n]", first, middle, last)) {
case EOF: // empty line, unlikely but possible if stdin contains '\0'
case 0: // no name was input
printf("No name\n");
break;
case 1: // name has a single part, like Superman
printf("Standard name: %s\n", first);
strcpy(last, first);
*first = '\0';
break;
case 2: // name has 2 parts
printf("Standard name: %c. %s\n", first[0], middle);
strcpy(last, middle);
*middle = '\0';
break;
case 3: // name has 3 or more parts
printf("Standard name: %c. %c. %s\n", first[0], middle[0], last);
break;
}
}
return 0;
}
참고 : 외국 이름을 멀티 바이트 문자로 생각하거나 단순히 빌 게이츠라고도하는 William Henry Gates III
으로 생각할 수도 있습니다. 위의 코드는 후자를 처리하지만이 하나 Éléonore de Provence
, 헨리 III, 잉글랜드의 왕, 1223의 젊은 아내 - 1291
이 코드의 유일한 problemI 자체는 의미 @chqrlie입니다. 그 사람이 중간 이름을 가지고 있지는 않지만 처음과 마지막 이름 만 입력하면, 성은 중간 이름으로 해석됩니다. – user3078414
@ user3078414 : 귀하의 의견에 무슨 뜻인지 모르겠습니다. 사용자가 2 부분으로 만 이름을 입력하면'first'와'middle' 만'sscanf()'에 의해 변환되고 * 표준 이름 *이'first'와'full' 중간의 처음으로 인쇄됩니다. 그것은 정말로 성입니다. 이 세 배열의 이름을'part1','part2' 및'part3'로 변경하면 혼동을 줄일 수 있습니다. – chqrlie
귀하의 반응에 감사드립니다, @ chrrlie. 데이터를 구성하고 필요한 데이터베이스에 복사 할 준비를하는 코드를 생각하고 있습니다. 나는 누군가가'printf()'를 먹이는 것과 같은 코드를 필요로한다고 생각하지 않는다. (- : – user3078414