我有以下代码:
std::cout << "Beginning computations..."; // output 1
computations();
std::cout << " done!\n"; // output 2
然而,问题是输出#1和输出#2通常同时出现(虚拟)。也就是说,在computations()
返回之前,输出#1通常不会打印到屏幕上。由于输出#1的整个目的是指示某些事情在后台发生(从而鼓励用户耐心),这个问题并不好。
有没有办法强制std::cout
缓冲区在computations()
通话之前打印?或者,是否有其他方式(使用std::cout
以外的其他方式)打印到标准输出以解决此问题?
答案 0 :(得分:47)
只需插入std::flush
:
std::cout << "Beginning computations..." << std::flush;
另请注意,在写完换行符后,插入std::endl
也会刷新。
答案 1 :(得分:5)
除了约瑟夫·曼斯菲尔德的答案之外,std::endl也会进行同花顺(除了新的一行)。
将一个endline字符插入到输出序列os中并将其刷新,就像调用os.put(os.widen('\ n'))后跟os.flush()一样。