【发布时间】:2018-11-26 04:14:52
【问题描述】:
我想实现一个简单的代码来在输入类型不是整数时打印错误信息。
以下是示例代码。
int num;
while (1) {
printf("Input the value of integer: ");
int result = scanf(" %d", &num);
if (result == 0) {
printf("ERROR-Not an integer.\n");
}
else if (num < 0) {
printf("ERROR- Not positive.\n");
}else{
break;
}
}
在这段代码中,如果值不是整数,“scanf”会询问数字。
但是,当输入不是整数时,此函数没有中断。
也许问题在于缓冲区的值。 "fflush" 会是解决方案,但我不想使用它。
【问题讨论】:
-
不需要
" %d"中的前导空白字符,因为%d转换说明符已经使用前导空白字符;唯一不使用前导空格的转换说明符是%c、%n和%[]。 -
测试应该是
result != 1,因为在输入失败的情况下结果可能是否定的 -
您可以从
scanf()获得 3 个结果 — 1、0、EOF。当你得到 0 时你报告了一个错误,但是你没有做任何事情来修复这个错误,所以下一次尝试也会失败,并且会一直失败,直到你对输入流中不需要的字符做一些事情。您还应该检测 EOF 并终止循环。通常,您应该将错误报告给标准错误 (stderr) 而不是标准输出 (stdout)。无论如何,这就是它的目的。
标签: c while-loop scanf