我在c ++中的输出有问题。
我有一个函数A,该函数调用另一个函数B。在函数B中,如果出现错误,我将使用cerr
打印一条错误消息。在函数A中,调用B后,我用cout
打印了几行。
我的问题是,即使函数B在将控制权返回给函数A之前就打印了错误,也会在用cout
打印的行之间随机打印错误消息,因此它应该仅在此之后打印错误消息。 ,它将控制权返回给函数A并使用cout
打印。
我正在使用CLion及其控制台。
有什么建议吗?
答案 0 :(得分:2)
假设您使用的是单个线程,则可能只需要在流之间进行切换之前先刷新流。您可以使用std::endl
来编写新行然后进行刷新,也可以只调用std::cout.flush()
来显式刷新stdout(并调用std::cerr.flush()
来刷新stderr)。
答案 1 :(得分:0)
其中一条注释中已经提到,std::cout
和std::cerr
是独立的流。没有规定您是否应该同步以及应该如何同步。控制台窗口将这两个流合并在一起只是为了将它们显示在一个位置,但它不会尝试将流的内容划分为行(和混合的全行)或类似的内容。