我有一个小的 C 程序,它只从标准输入读取数字,每个循环周期一个。如果用户输入了一些 NaN,则应将错误打印到控制台并再次返回输入提示。在输入“0”时,循环应该结束,给定的正/负值的数量应该打印到控制台。这是程序:
#include <stdio.h>
int main()
{
int number, p = 0, n = 0;
while (1) {
printf("-> ");
if (scanf("%d", &number) == 0) {
printf("Err...\n");
continue;
}
if (number > 0) p++;
else if (number < 0) n++;
else break; /* 0 given */
}
printf("Read %d positive and %d negative numbers\n", p, n);
return 0;
}
我的问题是,在输入一些非数字(如“a”)时,这会导致无限循环一遍又一遍地写入“-> Err ...”。我想这是一个 scanf() 问题,我知道这个函数可以被一个更安全的函数替换,但这个例子是为初学者准备的,只知道 printf/scanf、if-else 和循环。
我已经阅读了这个问题的答案,scanf()
跳过了 C 中的所有其他while
循环并浏览了其他问题,但没有什么能真正回答这个具体问题。