我在程序中使用scanf()函数来扫描整数。我这样做的方式是:
while (!feof (stdin))
if (scanf("%d", &height) != 1) { puts("Wrong input!"); return 1; }
问题是,在实际执行EOF之后,我得到错误的输入并返回1,因为scanf没有返回1.我应该如何解决这个问题?
答案 0 :(得分:2)
这种方法存在许多问题。 (EOF在尝试阅读之前没有激活,像'A'这样的文本输入会产生无限循环等等)而是:
char buf[100];
while (fgets(buf, sizeof buf, stdin) != NULL) {
if (sscanf(buf, "%d", &height) != 1) {
puts("Wrong input!");
return 1;
}
do_something(height);
}
return 0;
答案 1 :(得分:1)
作为scanf
州的文档,它将返回成功匹配和分配的项目数。如果完全成功,则可以是您提供的项目数,或者如果未能匹配输入,则可以是低于该数量的任何数字。如果是EOF,它将返回EOF。所以,检查它!
int result = scanf("%d", &height);
if (result != EOF && result != 1) {
// We've failed!
}