2016-03-26 15 views
2

プログラムが開始されてからリアルタイムで経過秒数を印刷します。まず出力は "0"です。 1秒後、 "0"は "1"に置き換えられ、以下同様に続きます。ここに私が最初に書いたコードがあります。Cの現在の行を印刷、遅延、消去する

これは、7秒の最後に出力「7」を与えました。

次の置換を行うと、コードは正常に動作します。

  printf("\33[A"); //vt100 char, moves cursor up 
      printf("\33[2K"); //vt100 char, erases current line 
      printf("%ld\n", time/CLOCKS_PER_SEC); 

問題によって

printf("%ld\n", 0); 

  printf("\r"); 
      printf("%ld", time/CLOCKS_PER_SEC); 

によって

printf("%ld", 0); 

現在の行が完全に決定されるまで出力は習慣送信されると思われます。ここで何が起きてるの?

私はUbuntuでgccコンパイラを使用しています。

+0

'fflush(stdout);' – hyde

答えて

2

printf()で書き込んでいる出力ストリームは、改行が受信されるまでバッファリングします。改行を送信していないので、アプリケーションが終了するかバッファがいっぱいになるまでフラッシュされません。

fflush(stdout)を使用して、上記のコメントでhydeが述べたように、各printf()の後に出力バッファをフラッシュすることができます。

また、setbuf(stdout、NULL)を使用してバッファリングを無効にすることもできます。

関連する問題