您的位置:首页 > 编程语言 > C语言/C++

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

2016-05-17 10:21 162 查看
方法有两种:

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

测试结果为:



还有一种方法是使用

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

效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: