Cout和Cerr不同步

时间:2018-07-10 11:43:21

标签: c++ cout

我在c ++中的输出有问题。 我有一个函数A,该函数调用另一个函数B。在函数B中,如果出现错误,我将使用cerr打印一条错误消息。在函数A中,调用B后,我用cout打印了几行。

我的问题是,即使函数B在将控制权返回给函数A之前就打印了错误,也会在用cout打印的行之间随机打印错误消息,因此它应该仅在此之后打印错误消息。 ,它将控制权返回给函数A并使用cout打印。

我正在使用CLion及其控制台。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

假设您使用的是单个线程,则可能只需要在流之间进行切换之前先刷新流。您可以使用std::endl来编写新行然后进行刷新,也可以只调用std::cout.flush()来显式刷新stdout(并调用std::cerr.flush()来刷新stderr)。

答案 1 :(得分:0)

其中一条注释中已经提到,std::coutstd::cerr是独立的流。没有规定您是否应该同步以及应该如何同步。控制台窗口将这两个流合并在一起只是为了将它们显示在一个位置,但它不会尝试将流的内容划分为行(和混合的全行)或类似的内容。