首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为何while和scanf结合做判断,==就可以循环,=就不可以循环

2013-01-23 
为什么while和scanf结合做判断,就可以循环,!就不可以循环?请教各位大虾,如下代码:int mwhile(scanf(%

为什么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",&amp;amp;m)!=1)
{
puts("OK");
getchar();
}

return 0;
}
这样就……


试试setbuf(stdin, NULL)这个

热点排行