stdout,并需要用C++对其进行刷新
stdout and need to flush it C++
我有一些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
的答案只有在您想要返回时才有效。不确定如果要清除命令提示符,将如何执行此操作。
相关文章:
- 是否可以配置提升日志刷新?
- 如何在qt中同步应用程序和显示器的刷新率?
- 在 3ds Max 中更新进度条后,环境和效果 UI 不刷新
- std::endl,在 Python 中是否有等价物?(返回 + 刷新)
- 在 directx11 代码中更改全屏模式下的刷新率不起作用
- 如何在 Windows 中立即刷新文件夹图标
- 刷新来自Qpid质子连接的所有消息而不是等待?
- 如何让 cout 缓冲区在 ubuntu 上刷新
- 显示DHT1306温度数据时如何正确刷新Adafruit 11 OLED?
- 为什么PNG图像的stdout有时会在printf中刷新图像的一半
- QML:收到C 信号从C 传递时刷新问题
- 托管语言是否锁定本机库的刷新和重新加载变量?
- 记录器何时应刷新
- 在 Linux 上编译一个 c++ 应用程序,并在 TI TIVA TM4C123GH6PM上刷新它
- 如何刷新CPU缓存中的地址范围?
- 有没有办法刷新与程序相关的整个CPU缓存
- 在关闭 QFile 之前是否需要刷新 QTextStream?
- Eclipse 不会刷新 .project 信息
- 缓冲区刷新究竟是如何工作的(std::endl 和 之间的区别)?
- 在HTML内部刷新div,没有任何PHP