c ++ force std :: cout flush(打印到屏幕)

syn*_*tik 31 c++ cout flush

我有以下代码:

std::cout << "Beginning computations..."; // output 1
computations();
std::cout << " done!\n";                  // output 2
Run Code Online (Sandbox Code Playgroud)

然而,问题是输出#1和输出#2经常(几乎)同时出现.也就是说,输出#1通常直到computations()返回后才会打印到屏幕上.由于输出#1的整个目的是指示某些事情在后台发生(从而鼓励用户耐心),因此这个问题并不好.

有没有办法强制std::cout缓冲区在computations()通话前打印?或者,是否有其他方式(使用其他东西std::cout)打印到标准输出,可以解决这个问题?

Jos*_*eld 54

只需插入std::flush:

std::cout << "Beginning computations..." << std::flush;
Run Code Online (Sandbox Code Playgroud)

另请注意,std::endl在写入换行符后插入也会刷新.

  • @ user1810087抱歉,我编辑过,但很快.我想是在你回答之前. (3认同)

use*_*087 5

除了约瑟夫曼斯菲尔德的回答,std :: endl也是冲洗(除了新线).

将一个endline字符插入到输出序列os中并将其刷新,就像调用os.put(os.widen('\n'))后跟os.flush()一样.