2

重複の可能性:
改行が書式文字列に含まれていない限り、呼び出し後に printf がフラッシュされないのはなぜですか?

フォーラムでいくつかの質問に答えようとしていたところ、かなり興味深いものに遭遇しました。コードは次のとおりです。

int main()
{
 int print_val = -1;

 while(1)
 {
  printf("%d \n", ++print_val);
  sleep(1);
 }
}

これは完璧に機能します。さあ、楽しみが始まります.. 7行目を次のように変更する printf("%d ", ++print_val);だけです(改行を削除してください!)

そして今、出力はありません..!

だから、sleep()関数の動作を理解するのを手伝ってくれる人はいますか..?printf() ではなく sleep() を調べる必要があると思います。なぜなら、fprintf() と putc() に置き換えてみたので、まったく同じ出力が得られたからです。

このコードを 32 ビット Ubuntu と仮想マシンの 32 ビット Ubuntu で試しました。

ありがとうアドーン

4

1 に答える 1

6

問題は出力バッファのフラッシュにあると思います。文字列の最後に '\n' を付けないと、出力バッファはフラッシュされず、printf は何も出力しません。出力バッファがいっぱいになったときにのみ印刷を開始します。この質問とこれを見てください。

于 2012-10-31T06:45:30.763 に答える