文档章节

C / C++ 输入输出缓存处理

宁宁爸
 宁宁爸
发布于 2016/05/17 10:21
字数 425
阅读 126
收藏 0

码上生花,ECharts 作品展示赛正式启动!>>>

方法有两种:

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

setvbuf(stdout, NULL, _IONBF, 0);

2,输出前刷新输出stdout 

fflush(stdout); 

 

如何正确清空cin缓存

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

cin.sync();

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

又有说法是使用

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

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

#include <iostream>

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 <iostream>

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

 

 

 

 

© 著作权归作者所有

宁宁爸
粉丝 83
博文 59
码字总数 26489
作品 0
高级程序员
私信 提问
加载中
请先登录后再评论。
std(标准库)和STL(标准模板库)的关系

C++标准库的内容分为10类: C1.语言支持 C2.输入/输出 C3.诊断 C4.一般工具 C5.字符串 C6.容器 C7.迭代器支持 C8.算法 C9.数值操作 C10.本地化; 下面分类详解: C1 标准库中与语言支持功能相...

osc_ehpefkfl
2019/02/13
1
0
C++标准库和标准模板库(转)

转自原文http://blog.csdn.net/sxhelijian/article/details/7552499 C++强大的功能来源于其丰富的类库及库函数资源。C++标准库的内容总共在50个标准头文件中定义。在C++开发中,要尽可能地利...

osc_vy694i16
2019/02/22
2
0
简述c和c++的基本区别,你真的懂吗?(面试必学)

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者:angry_youth 1.c和c++的头文件不同: c的头文件------#...

osc_99vlkukb
2019/12/06
1
0
算法与数据结构(十四):IO 模板总结(C++ & Python)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/Dbyfreedom/article/details/98237573 不少网络笔试不像 LeetCode 帮...

dby_freedom
2019/08/02
0
0
小朋友学C++(47):标准库与标准模板库

C++强大的功能来源于其丰富的类库及库函数资源。C++标准库的内容总共在50个标准头文件中定义。 在C++开发中,要尽可能地利用标准库完成。这样做的直接好处包括: (1)成本:已经作为标准提供...

海天一树
03/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ZOOM International开始以Elevēo品牌开展业务

所有ZOOM Int.产品、销售和服务正在向Elevēo品牌过渡 田纳西州富兰克林和布拉格--(美国商业资讯)--全渠道合规记录、人力资源优化(WFO)和呼叫中心收入保护软件的全球领导者ZOOM Internationa...

osc_vzt0zpwr
12分钟前
20
0
openEuler for arm64(鲲鹏)

设置repo软件源 [base] name=openEuler 20 base baseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/aarch64/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.huawei......

chipo
12分钟前
8
0
Mysql 游标的简单使用方法

一、游标简介 1、游标简介 游标是一个存储在MySQL服务器上的数据库查询,它不是一条select语句,而是被该语句检索出来的结果集。有了游标可以方便的对该结果集进行逐行处理。 游标的设计是一...

文文1
13分钟前
10
0
怀里橘猫柴犬,掌上代码江湖——对话阿里云 MVP郭旭东

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 简介: 跟郭旭东聊过之后,我对程序员的敬佩又多一分。这个92年的开发者,难能可贵...

osc_3b0dcpcm
13分钟前
9
0
CMAKE_CURRENT_SOURCE_DIR

CMAKE_CURRENT_SOURCE_DIR CMAKE_CURRENT_SOURCE_DIR 这是当前处理的CMakeLists.txt所在的目录 CMAKE_CURRENT_LIST_DIR (自2.8.3开始)这是当前正在处理的列表文件的目录. 来自Docs: CMAKE_...

osc_cdixgndu
14分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部