C - 读取scanf直到feof(stdin),不输出错误

时间:2013-11-17 19:05:04

标签: c return scanf eof

我在程序中使用scanf()函数来扫描整数。我这样做的方式是:

while (!feof (stdin))
if (scanf("%d", &height) != 1) { puts("Wrong input!"); return 1; }

问题是,在实际执行EOF之后,我得到错误的输入并返回1,因为scanf没有返回1.我应该如何解决这个问题?

2 个答案:

答案 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!
}