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

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

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

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

作为scanf状态的文档,它将返回成功匹配和分配的项目数。 这可以是您完全成功时给出的项目数或者低于该数量的任何数量,如果输入无法匹配,则可以是零。 如果是EOF,它将返回EOF。 所以,检查一下!

 int result = scanf("%d", &height); if (result != EOF && result != 1) { // We've failed! } 

这种方法存在许多问题。 (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;