春季开学 第二篇

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

也可以
这是因为程序对于空格和回车换行同意看待,只要你还没有输完,就都可以继续
等输入完了,再按空格都没啥反应了,回车就是确认的标志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值