![](/img/trans.png)
[英]C++ std:cout won't print, despite me using std::endl to enter newline and flush
[英]std::cout won't print
是否有std::cout << "hello"
不起作用的情況? 我有 ac/c++ 代碼,但是std::cout
不打印任何內容,甚至不打印常量字符串(例如“hello”)。
有什么方法可以檢查cout
是否能夠/無法打開 stream? 有一些成員函數,比如good()
, bad()
,......但我不知道哪一個適合我。
確保刷新流。 這是必需的,因為輸出流是緩沖的,除非您自己手動刷新緩沖區,否則您無法保證何時刷新緩沖區。
std::cout << "Hello" << std::endl;
std::endl
將輸出換行符並刷新流。 或者, std::flush
只會進行刷新。 也可以使用流的成員函數完成刷新:
std::cout.flush();
std::cout 不適用於 GUI 應用程序!
特定於 MS Visual Studio :當您想要一個控制台應用程序並使用 MS Visual Studio 時,將項目屬性“鏈接器 -> 系統 -> 子系統”設置為控制台。 在 Visual Studio 中創建新的 Win32 項目(用於本機 C++ 應用程序)后,此設置默認為“Windows”,這會阻止 std::cout 將任何輸出放到控制台。
std::cout
很可能由於緩沖而無法工作(您所寫的內容最終出現在std::cout
的緩沖區中,而不是在輸出中)。
您可以執行以下操作之一:
顯式刷新std::cout
:
std::cout << "test" << std::flush; // std::flush is in <iostream>
std::cout << "test"; std::cout.flush(); // explicitly flush here
std::cout << "test" << std::endl; // endl sends newline char(s) and then flushes
改用std::cerr
。 std::cerr
沒有緩沖,但它使用不同的流(即,如果您對“查看控制台上的消息”感興趣,則第二種解決方案可能對您不起作用)。
要有效地禁用緩沖,您可以調用它:
std::setvbuf(stdout, NULL, _IONBF, 0);
或者,您可以調用您的程序並在命令行中禁用輸出緩沖:
stdbuf -o 0 ./yourprogram --yourargs
請記住,出於性能原因,通常不會這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.