自动cout冲洗

时间:2012-06-13 17:15:00

标签: c++ process flush cout

美好的一天,

我编写了一个Java程序,它使用Process对象和Runtime.exec()函数调用启动多个C ++编写的程序。 C ++程序使用cout和cin作为输入和输出。 Java程序发送信息并从C ++程序输入流和输出流中读取信息。

然后我有一个字符串缓冲区,通过在字符串缓冲区中附加C ++程序的输入和输出来构建程序的典型交互。问题是所有的输入调用都会被追加,然后所有的输出调用都会被发布。例如,StringBuffer的实例可能是这样的......

2
3
Please enter two numbers to add. Your result is 5

当程序在标准控制台上看起来像这样时

Please enter two numbers to add. 2
3
Your result is 5

问题是我得到了输出和输出的顺序,因为除非C ++程序调用cout.flush()函数,否则在给出输入之前不会写入输出。

有没有办法自动刷新缓冲区,所以C ++程序不必担心调用cout.flush()?类似于C ++程序是与命令控制台交互的独立程序,程序员并不总是需要cout.flush(),命令控制台仍然在输入之前输出数据。

谢谢,

2 个答案:

答案 0 :(得分:4)

如果有人来寻找将cout设置为始终刷新的方法。在做一些coredump调查等时,这是完全公平的。

查看std::unitbuf

std::cout << std::unitbuf; 

在节目开始时。

默认情况下,它会在每次插入时刷新。

答案 1 :(得分:3)

我不能保证它会解决您的所有问题,但是当您cout时自动刷新流可以使用endl

e.g:

cout << "Please enter two numbers to add: " << endl;

使用"\n"不会刷新流,就像你正在做的那样:

cout << "Please enter two numbers to add:\n";

请注意,如果您进行大量输出,使用endl可能会(相对)缓慢

有关详细信息,请参阅this question