_std::cout << "hello"
_が機能しない状況はありますか?私はc/c ++コードを持っていますが、_std::cout
_は何も出力せず、定数文字列(「hello」など)も出力しません。
cout
がストリームを開くことができるかどうかを確認する方法はありますか? good()
、bad()
、...などのメンバー関数がいくつかありますが、どちらが自分に適しているかわかりません。
必ずストリームをフラッシュしてください。これは、出力ストリームがバッファリングされており、自分で手動でフラッシュしない限り、いつバッファがフラッシュされるかを保証できないためです。
std::cout << "Hello" << std::endl;
std::endl
は改行を出力し、ストリームをフラッシュします。または、std::flush
will justフラッシュします。フラッシュは、ストリームのメンバー関数を使用して行うこともできます。
std::cout.flush();
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番目のソリューションが機能しない場合があります)。
std :: coutはGUIアプリでは動作しません!
MS Visual Studioに固有:コンソールアプリケーションが必要で、MS Visual Studioを使用する場合は、プロジェクトプロパティ「リンカー->システム->サブシステム」をコンソールに設定します。 Visual Studioで新しいWin32プロジェクト(ネイティブC++アプリ用)を作成した後、この設定はデフォルトで「Windows」になり、std :: coutがコンソールに出力を出力できなくなります。
バッファリングを効果的に無効にするには、これを呼び出すことができます:
std::setvbuf(stdout, NULL, _IONBF, 0);
または、プログラムを呼び出して、コマンドラインで出力バッファリングを無効にすることもできます。
stdbuf -o 0 ./yourprogram --yourargs
通常、これはパフォーマンス上の理由から行われないことに注意してください。