stdout,并需要用C++对其进行刷新

stdout and need to flush it C++

本文关键字:刷新 C++ stdout      更新时间:2023-10-16

我有一些C++代码使用cout语句进行调试,由于某种原因,除非在最后执行std::cout.flush();,否则我无法打印所有数据。

我不太明白为什么需要这个冲洗操作。

有人有什么见解吗?

要添加到其他答案中:您的调试语句应该转到cerr,因为:

  • 它写入标准错误,这意味着在运行应用程序时,可以通过重定向轻松地将"正常"程序输出与错误/调试信息分离
  • 最重要的是,默认情况下,cerr无缓冲,这意味着在每次输出操作后,它将自动刷新自己,通常这对于错误和调试输出是可取的

(来源:C++标准,§27.3.1¶4-5,§27.4.2.1.2表83)

您是否使用std::endl来终止您的线路。这应该是通常的做法,直到性能问题另有要求,但对于一些原因,我看到很多代码都使用'n'

否则,你总是可以做:

std::cout.setf( std::ios_base::unitbuf );

作为CCD_ 7中的第一件事。这将导致每个<<的末尾,这超出了您的需要,但用于诊断输出到控制台,可能是完全可以接受的。

没有自动刷新的数据最后是否缺少n?默认情况下,在看到回车之前,标准输出不会被交付。

"当您将输出发送到流时,它不一定会立即打印出来。相反,它可能会在缓冲区中等待,直到某个未指定的事件,例如缓冲区已满、从输入读取或从程序退出。详细信息可能会有所不同。"

http://www.cs.hmc.edu/~geoff/classes/hmc.cs070.200109/notes/io.html

在C++中,可以使用带有cout运算符的endl格式化程序,而不是flush

这是正确的行为。您可能使用std::endl来添加n并刷新缓冲区。http://www.cplusplus.com/reference/ostream/endl/

如果要查看输出,则需要刷新流。

std::endl的答案只有在您想要返回时才有效。不确定如果要清除命令提示符,将如何执行此操作。