簡體   English   中英

標准輸出並需要刷新它 C++

[英]stdout and need to flush it C++

我有一些 C++ 代碼使用cout語句進行調試,出於某種原因,除非我執行std::cout.flush();否則我無法打印所有數據。 在最后。

我不太明白為什么需要這個刷新操作。

任何人有任何見解?

要添加到其他答案:您的調試語句應該改為 go 到cerr ,因為:

  • 它寫入標准錯誤,這意味着,運行應用程序,您可以通過重定向輕松地將“正常”程序 output 從錯誤/調試信息中分離出來;
  • 最重要的是, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM