为什么while和scanf结合做判断,==就可以循环,!=就不可以循环?
请教各位大虾,
如下代码:
int m;
while(scanf("%d",&m)==1)
puts("OK");
这种代码可以正确的循环,即输入整数就输出ok,然后等待继续输入下一个输入。
但是如下代码:
int m;
while(scanf("%d",&m)!=1)
puts("OK");
仅仅是把==换成!=,我想象的情况是如果输入不是整数,则输出ok,然后等待下一个输入,可实际情况是一直在输出OK,永远不停。
请问为什么有这种差异?有人能从原理上说清楚吗?多谢。
while scanf
[解决办法]
scanf()是读的缓冲区,你输入的不是数字,读取就失败,缓冲区就不会空。所以它会一直读。
记得fflush
while(scanf("%d",&m)!=1){
puts("OK");
fflush(stdin);
}