繁体   English   中英

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

[英]C - read scanf until feof(stdin), don't output error

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM