fflush(stdin);
这个在写课设的时候会遇到,fflush() 啥意思?
这个是清空输入缓存区 的意思,
这个看似基础的内容,其实初学C语言的时候很容易被忽略,但是其实很重要,现在重新理解一遍
先来一段最最简单的经典代码
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
printf("%d",a);
return 0;
}
这个程序很简单,你输入一个整数,就输出一个整数。
这个过程。我们在键盘上按下了一串数字,然后按下了回车,cmd就出现了刚才按下的内容。
朴实无华,没毛病
那么实际上,整个电脑里发生了啥?
1、咱们在键盘上按下了123
2、123进入了一个叫做 输入缓存区(buffer) 的地方
3、咱们按下回车
4、程序收到回车的命令
5、scanf 扫描这块 输入缓存区(buffer) 的内容
6、程序执行,然后输出给显示器,咱们看到了。
很明显,直观上,123不是咱们一输入,就直接进入到显示屏上;机器内部,123被放入缓存区。
等待我们按下回车键,程序检测到了回车,就scanf等函数开始读取缓存区的内容,并且数据进入程序、处理数据、输出相应结果到屏幕上—被我们看到。
而这次主角 fflush(stdin); 就是负责清除输入缓冲区内容
fflush 负责清除;stdin是被指定的区域,std=standard(标准),in=input(输入)
如果不刷新,会咋样?
解释一堆都抽象,直接上代码跑一下就知道了。
#include <stdio.h>
int main( void ){
int i;
for (;;)
{
fputs("Please input an integer: ", stdout);
scanf("%d", &i);
printf("%d\n", i);
//fflush(stdin); 这句fflush 是否加上就成了变量
}
return 0;
}
第九行去除,就会无限循环,这是为啥?因为有非法输入,一直残留在缓存区。
从右到左就是正常过程,但是,如果非法输入呢? 我偏不输入数字,我来个abc
注意红色部分那里! 很重要,让你走,缓存区就不留你了!不让你走,你就继续待着。
然后又是个for循环,这次输出不成,就继续循环。
第二次,我好好输入,给个123就有用了吧?
没用的!
因为abc一直堵在那! 后面来再多的123 也没用的!
所以,fflush 就有用了!
诶!fflush就是绿色箭头! 让堵路的abc走了!让路给后面来的123了。
这就是fflush和缓存区的内容了。
补充:我们输入时scanf("%d %d %d",&a,&b,&c);
1 2 3
可以
1
2
3
也可以
这是因为程序对于空格和回车换行同意看待,只要你还没有输完,就都可以继续
等输入完了,再按空格都没啥反应了,回车就是确认的标志。