我正在使用scanf() returns when it gets what is expects or when it doesn't. What happens is it gets stuck in the
while()`loop。
据我所知test = scanf("%d", &testNum);
如果收到一个数字则返回1,如果没有则返回0.
我的代码:
#include<stdio.h>
int main(void) {
while (1) {
int testNum = 0;
int test;
printf("enter input");
test = scanf("%d", &testNum);
printf("%d", test);
if (test == 0) {
printf("please enter a number");
testNum = 0;
}
else {
printf("%d", testNum);
}
}
return(0);
}
答案 0 :(得分:1)
这里的问题是,遇到无效的输入(例如,一个字符),错误的输入不是消耗,它仍然在输入缓冲区中。
因此,在下一个循环中,scanf()
再次读取相同的无效输入。
您需要在识别错误输入后清理缓冲区。 简单的方法将是
if (test == 0) {
printf("please enter a number");
while (getchar() != '\n'); // clear the input buffer off invalid input
testNum = 0;
}
也就是说,初始化test
或删除printf("%d", test);
,因为test
是一个自动变量,除非明确初始化,否则包含不确定的值。尝试使用它可以调用undefined behavior。
那说,只是为了挑剔,return
不是一个功能,不要让它看起来像一个。这是一个很好的结果,所以return 0;
对眼睛来说更舒缓,更不用说混乱了。