【发布时间】:2020-07-21 09:26:27
【问题描述】:
我有以下代码:
#include <stdio.h>
int main(){
int a;
while(1)
{
scanf("%d", &a);
if(a >= 1000000 || a <= 9999)
{
printf("Error");
}
else
{
break;
}
}
return 0;
}
我希望用户输入类似 20201 的内容,如果输入无效,它将重新开始,但我注意到当我输入 2020.1 时程序返回:
ErrorErrorErrorErrorErrorErrorError...
并且一直循环,永远不会再问号码,为什么会发生这种情况?代码不是假设只打印一条错误消息并在scanf中再次等待输入吗?
【问题讨论】:
-
检查输入是否无效,需要检查
scanf的返回值。并且清理输入缓冲区,这样就不会一次又一次地被读取……或者使用更好的输入法,比如fgets。 -
卡在小数点上,保留在输入缓冲区中,
标签: c loops while-loop scanf stdin