2013-02-13 31 views
12

std::cout << "hello"が動作しない場合はありますか?私はc/C++コードを持っていますが、std::coutは何も印刷しません。定数文字列( "hello"など)でさえ印刷されません。std :: coutは印刷されません

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

+7

ああ、バッファリングされた出力ですが、芸術は無情で残酷な賢者です。 – WhozCraig

+3

Cに 'std :: cout'はありません。 –

+0

ウィンドウシステムでは、ウィンドウがあり、OSがあなたのウィンドウのどれに出力するのかわからないので、' std :: cout'は実装されないかもしれません。 –

答えて

29

ストリームを必ずフラッシュしてください。これは、出力ストリームがバッファされているため、手動でバッファをフラッシュしない限りバッファがフラッシュされるまで保証されないために必要です。

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

std::endl意志出力改行やストリームをフラッシュします。あるいは、std::flushとなります。はフラッシュします。フラッシングは、ストリームのメンバ関数を使用して行うことができます。

std::cout.flush(); 
+1

1かのどちらかは 'のstd :: coutの<<「こんにちは\ n」は' –

+0

は違い:( – mahmood

+3

@GrijeshChauhanを使用していません( 'flush()')やマニピュレータ( 'endl')に依存してストリームバッファをフラッシュするのはどうでしょうか?特定のC++標準以来このようになっていますか? – WhozCraig

5

std::coutが原因バッファリングに動作しない可能性が高い(あなたが書いているものstd::cout代わりの出力でのバッファで終わります)。

あなたはこれらの事の1行うことができます。明示的に

  • フラッシュ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番目の解決策がうまくいかない場合があります)。

+0

誰も私のコードで働いていませんでした。 –

1

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

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

を、あなたのプログラムを呼び出すと、コマンドラインで出力バッファリングを無効にすることができます

stdbuf -o 0 ./yourprogram --yourargs 

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

関連する問題