[英]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.