博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C / C++ 输入输出缓存处理
阅读量:6513 次
发布时间:2019-06-24

本文共 1023 字,大约阅读时间需要 3 分钟。

hot3.png

方法有两种:

1,设置输出缓存大小为0。

setvbuf(stdout, NULL, _IONBF, 0);

2,输出前刷新输出stdout 

fflush(stdout);

 

关于cin缓存的清空,网上有各种说法。最多的是使用

cin.sync();

但是,关于这个sync方法在不同的编译器中有不同的实现。VC中确实可以清空cin的缓存,但是在GNU中,不行。因此使用sync方法是没有通用性的。

又有说法是使用

cin.seekg(0, ios_base::end);

但是依旧无法正常工作。以下是一个测试代码:

#include 
using namespace std;int main() { int a, b; cin >> a; cin.seekg(1, ios_base::end); cin >> b; cout << a << ',' << b << endl; return 0;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

测试结果为: 

result

还有一种方法是使用

fflush(stdin);

这种方法一般是可以成功的。但是,如果肯定只使用cin和cout,而不使用stdio的内容的话,可以加入以下语句增加输入输出的速度:

cin.sync_with_stdio(false);

这种情况下,fflush无法正常工作了。

最后,说一个肯定可以解决问题的方案,使用ignore方法,第一个参数表示忽略多少个字符,可以传入第二个参数,表示直到碰到什么字符为止。可以使用以下方案:

cin.ignore(INT_MAX, ‘\n’);

最终的解决方案示例代码如下:

#include 
using namespace std;int main() { int a, b; cin.sync_with_stdio(false); cin >> a; cin.ignore(INT_MAX, '\n'); cin >> b; cout << a << ',' << b << endl; return 0;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

效果如下: 

result

 

 

 

 

转载于:https://my.oschina.net/hanshubo/blog/676250

你可能感兴趣的文章
HDU 2242 考研路茫茫——空调教室(边双连通)
查看>>
如何在C#项目中使用NHibernate
查看>>
安装python包到指定虚拟环境
查看>>
力扣(LeetCode)21
查看>>
网页视频流m3u8/ts视频下载
查看>>
Python 基础起步 (十) 什么叫函数?
查看>>
5G一周热闻:华为夺联通5G大单,首张5G电话卡发放
查看>>
“迁移策略+新容器运行时”应对有状态应用的冷热迁移挑战
查看>>
使用Swoole加速Laravel(正式环境中)
查看>>
mockjs让前端开发独立于后端
查看>>
延迟脚本的方式
查看>>
1.4linux单用户模式下修改root密码和救援模式修改root密码
查看>>
微服务架构优缺点
查看>>
解读userenv的日志
查看>>
跨进程通信之Messenger
查看>>
ext3与ext4区别
查看>>
DHCP Snooping + Dynamic ARP Inspection(DAI) 配置
查看>>
UNIX/Linux 系统管理技术手册阅读(三)
查看>>
btrfs的使用(案例讲解)
查看>>
安装配置samba服务器和客户端
查看>>