自动冲洗水
Automatic cout flushing
美好的一天,
我编写了一个 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(),命令控制台仍然在输入之前输出数据。
谢谢
以防有人来寻找一种方法来设置cout
始终刷新。在进行一些核心转储调查等时,这可能是完全公平的。
看看std::unitbuf
.
std::cout << std::unitbuf;
在程序开始时。
默认情况下,它将在每次插入时刷新。
我不能保证它会解决您的所有问题,但是要在cout
时自动刷新流,您可以使用endl
例如:
cout << "Please enter two numbers to add: " << endl;
使用 "n"
不会刷新流,就像您正在执行的操作一样:
cout << "Please enter two numbers to add:n";
请记住,如果您进行大量输出,使用 endl
可能会(相对)慢
有关详细信息,请参阅此问题
- 没有找到相关文章