fflush(stdin) & fflush(stdout)

fflush(stdin) & fflush(stdout)

1.fflush(stdin)

  • 清理标准输入流,把多余的仍未被保存的数据丢掉。

e.g.

int a;
char str[10];
cin>>a;
cout<<a<<endl;
cin>>str;
cout<<str<<endl;

程序的本意是从stdin获得一个整数存入a,接着立马打印出来;从stdin获得一个字符串存入str,也立马打印出来。

但是,在输入时如果输入了两个整数,在cin>>a之后,stdin缓冲还有一个整数没被读取。接下来,不等输入字符串,程序就直接把上面多出来的数字存入到str中去并打印。并不会输出字符串str,而是输出开始输入的第二个整数

此时可以在cin>>str;前插入fflush(stdin);即可解决问题。

即:

int a;
char str[10];
cin>>a;
cout<<a<<endl;
fflush(stdin);  // Notice!
cin>>str;
cout<<str<<endl;

2.fflush(stdout)

  • 清空输出缓冲区,并把缓冲区内容输出。
  • 并不是把数据丢掉,而是及时地打印数据到屏幕上。

标准输出是以『行』为单位进行的,也即碰到\n才打印数据到屏幕。这就可能造成延时,如下面这几行代码:

int a;
printf_s("input one number:");
fflush(stdout);     // #1
scanf_s("%d",&a);

如果没有#1,在某些平台上就可能迟迟看不到"input one number"被打印到屏幕上来,因为它没有回车。这时候,fflush(stdout)就起到及时输出的作用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值