【发布时间】:2014-03-28 10:00:38
【问题描述】:
我有如下代码:
std::cout << "Beginning computations..."; // output 1
computations();
std::cout << " done!\n"; // output 2
然而,问题是输出#1 和输出#2 通常(实际上)同时出现。也就是说,在computations() 返回之前,输出#1 通常不会打印到屏幕上。由于输出 #1 的全部目的是表明后台正在发生某些事情(从而鼓励用户耐心等待),所以这个问题并不好。
有什么方法可以强制在computations() 调用之前打印std::cout 缓冲区?或者,是否有其他方式(使用 std::cout 以外的其他方式)打印到标准输出来解决此问题?
【问题讨论】:
-
我听说
std::endl在这种事情上很受欢迎... -
@ebyrob 但这会结束这一行,如果他想在计算后继续在同一行打印,他需要手动刷新。
-
@leemes 说的很对。在这种情况下,他可以使用
fprintf()、std::flush(如下所示),或者修改他的cout版本以在每一行代码的末尾自动刷新......我有一个最后一个的SO线程但好像丢了。 -
@synaptik 你面对的是我没有面对的。它工作正常。我刚刚用一条
cout线制作了computation函数。但它在调用函数之前打印"Beginning computations..."。但我需要找出在哪个特定情况下缓冲区不会释放。