读书人

为何while和scanf结合做判断==就可以

发布时间: 2013-01-23 10:44:49 作者: rapoo

为什么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);
}

[解决办法]
引用:
引用:如果输入了非法数据,键盘缓冲区就可能还个有残余信息问题。
#include <stdio.h>

int main()
{
int m;

while(scanf("%d",&m)!=1)
{
puts("OK");
getchar();
}

return 0;
}
这样就……


试试setbuf(stdin, NULL)这个

读书人网 >C语言

热点推荐