簡體   English   中英

std::cout 不會打印

[英]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.

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