printf("Give name: ");
fgets(name, 50, stdin);
printf("Give surname: ");
fgets(surname, 50, stdin);
所有这一切都在循环中并且超出第一次,它打印命令以给出名称,然后完全跳过它并打印命令给出姓氏。循环是无止境的(在我的代码中它有一个带有中断的东西;它会在一段时间后结束):
while (1) {
printf("Give name : ");
fgets(name, 50, stdin);
printf("Give surname: ");
fgets(surname, 50, stdin);
printf("Give ID: ");
scanf("%d", &ID);
}
name
和surname
是数组。为什么它会跳过第一个名字之外的名字?
修改
你是对的。下面我的scanf
号码为ID
,完全忘记使用getchar
删除\n
个字符。感谢您的快速回复。
答案 0 :(得分:2)
发布的代码似乎没有重大问题,但仍存在问题:
scanf("%d", &ID);
的来电,您未检查成功,会在stdin
中留下待处理的换行符。fgets()
的返回值。它在文件末尾返回NULL
。如果你不打破那么你会得到一个无限循环。在stdin
中阅读fgets()
之前,您的C库可能无法刷新输出。这可以解释这种行为。添加对fflush(stdout);
的来电来解决此问题:
for (;;) {
printf("Give name : ");
fflush(stdout);
if (!fgets(name, 50, stdin))
break;
printf("Give surname: ");
fflush(stdout);
if (!fgets(surname, 50, stdin))
break;
printf("Give ID: ");
fflush(stdout);
if (scanf("%d", &ID) != 1)
break;
scanf("%*[^\n]"); /* consume extra characters on line, if any */
scanf("%*c"); /* consume the linefeed */
}