web-dev-qa-db-ja.com

std :: coutは印刷されません

_std::cout << "hello"_が機能しない状況はありますか?私はc/c ++コードを持っていますが、_std::cout_は何も出力せず、定数文字列(「hello」など)も出力しません。

coutがストリームを開くことができるかどうかを確認する方法はありますか? good()bad()、...などのメンバー関数がいくつかありますが、どちらが自分に適しているかわかりません。

20
mahmood

必ずストリームをフラッシュしてください。これは、出力ストリームがバッファリングされており、自分で手動でフラッシュしない限り、いつバッファがフラッシュされるかを保証できないためです。

std::cout << "Hello" << std::endl;

std::endlは改行を出力し、ストリームをフラッシュします。または、std::flush will justフラッシュします。フラッシュは、ストリームのメンバー関数を使用して行うこともできます。

std::cout.flush();
39

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はバッファリングされませんが、別のストリームを使用します(つまり、「コンソールのメッセージを表示する」以外に興味がある場合は、2番目のソリューションが機能しない場合があります)。

5
utnapistim

std :: coutはGUIアプリでは動作しません!

MS Visual Studioに固有:コンソールアプリケーションが必要で、MS Visual Studioを使用する場合は、プロジェクトプロパティ「リンカー->システム->サブシステム」をコンソールに設定します。 Visual Studioで新しいWin32プロジェクト(ネイティブC++アプリ用)を作成した後、この設定はデフォルトで「Windows」になり、std :: coutがコンソールに出力を出力できなくなります。

1
Jan Paulmann

バッファリングを効果的に無効にするには、これを呼び出すことができます:

std::setvbuf(stdout, NULL, _IONBF, 0);

または、プログラムを呼び出して、コマンドラインで出力バッファリングを無効にすることもできます。

stdbuf -o 0 ./yourprogram --yourargs

通常、これはパフォーマンス上の理由から行われないことに注意してください。

1
Nicolay77