[英]stdout and need to flush it C++
我有一些 C++ 代碼使用cout
語句進行調試,出於某種原因,除非我執行std::cout.flush();
否則我無法打印所有數據。 在最后。
我不太明白為什么需要這個刷新操作。
任何人有任何見解?
要添加到其他答案:您的調試語句應該改為 go 到cerr
,因為:
cerr
默認是unbuffered ,這意味着,在每次 output 操作之后,它會自動刷新自身,通常這對於錯誤和調試 output 是可取的。(來源:C++ 標准,§27.3.1 ¶4-5,§27.4.2.1.2 表 83)
您是否使用std::endl
來終止您的線路。 這應該是通常的做法,直到性能問題需要其他方式,但由於某種原因,我看到很多代碼使用'\n'
代替。
否則,您可以隨時執行以下操作:
std::cout.setf( std::ios_base::unitbuf );
作為main
中的第一件事。 這將導致在每個<<
結束時刷新,這超出了您的需要,但是對於控制台的診斷 output 可能是完全可以接受的。
未自動刷新的數據最后是否缺少\n
? 默認情況下,在看到回車之前不會傳遞標准輸出。
“當您將 output 發送到 stream 時,它不一定會立即打印。相反,它可能會在緩沖區中等待,直到某些未指定的事件,例如緩沖區已滿,從輸入讀取或退出程序。細節可能會有所不同。”
http://www.cs.hmc.edu/~geoff/classes/hmc.cs070.200109/notes/io.html
std::endl
的答案僅在您想要返回時才有效。 如果要清除命令提示符,不確定如何執行此操作。
這是正確的行為。 您可能使用std::endl
添加\n
並刷新緩沖區。 http://www.cplusplus.com/reference/ostream/endl/
如果要查看 output,則需要刷新 stream。
在 C++ 中,您可以將endl
格式化程序與cout
運算符一起使用,而不是使用flush
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.