文档章节

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

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

方法有两种:

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

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
宁宁爸
粉丝 80
博文 57
码字总数 25735
作品 0
高级程序员
C语言编程入门基础学习:控制语句之switch/case语句

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
05/29
0
0
嵌入式开发之C++基础学习笔记1--综合比较HelloWorld示例

选择C++的理由: 1)C++语言是由C语言扩充而来。它是一门混合型的语言,既支持传统的结构化程序设计,又支持面向对象的程序设计,这使得C++非常流行。它在编程中支持面向对象。因此,它比C更...

吴锦涛
2012/12/16
0
1
Linux中常用C/C++一些头文件的作用

1、 Linux中一些头文件的作用: <assert.h>:ANSI C。提供断言,assert(表达式) <glib.h>:GCC。GTK,GNOME的基础库,提供很多有用的函数,如有数据结构操作函数。使用glib只需要包含<glib.h...

SibylY
2013/09/25
0
0
C语言/C++编程学习未来之路

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
03/30
0
0
C++基础教程之C/C++区别

C/C++基础教程之C/C++区别 这是C++教程得第一步,后续会持续更新哦!欢迎新手(具有C基础),老鸟可绕道,可指导。 C++标准输入和输出 C++标准输入和输出分别是cin和cout,用法非常简单 cin>>n...

这个人很懒什么都没留下
09/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
0
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
0
0
学习设计模式——中介者模式

1. 认识中介者模式 1. 定义:用一个中介对象来封装一系列的对象交互行为,中介者使得各对象不需要显式的互相引用,从而使其松散耦合,独立的改变他们之间的交互。 2. 结构: Mediator:中介者...

江左煤郎
昨天
0
0
深入理解Plasma(1):Plasma 框架

这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章作为开篇,主要目的是理解 Plasma 框架。 Plasma 作为以太坊的二层扩容...

HiBlock
昨天
0
0
Java 8 日期 示例

Java 8 推出了全新的日期时间API。Java处理日期、日历和时间的方式一直为社区所诟病,将 java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限。Java也意识到需...

阿刚ABC
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部