4

次のようなものを出力する小さなプログラムを書きたい

CPU のテスト...完了
RAM のテスト...完了

等々。

Cで次のプログラムを書きました。

printf( "testing RAM...\t\t" );
sleep( sleep_time );
printf( "done\n\n" );

printf( "testing HDD...\t\t" );
sleep( sleep_time );
printf( "done\n\n" );

2 はどこsleep_timeですか。

ただし、最初に「testing CPU...」を印刷してから待機してから「done」を印刷する代わりに、最初に待機してから行全体を印刷しますが、これは私が考えていたものとはまったく異なります。

これは、コンパイラによる自動最適化と関係があると思います。
とにかく、目的の出力を得るにはどうすればよいですか?

OSX 10.5.6でXCode 3.1を使用しています

ありがとう、
バスティアン

4

3 に答える 3

21

問題は、印刷がバッファリングされていることです。スリープする直前に、fflush(stdout) を呼び出します。バッファをフラッシュする

于 2008-11-12T19:00:43.383 に答える
2

コンパイラは、印刷とスリープを並べ替えることができません。これは、C 抽象マシンの「外部から観察可能な動作」であるためです。

あなたが得るのは、標準出力のバッファリングによるものです。fflush または print to stderr を使用できますが、これはバッファリングされません。

于 2008-11-13T14:14:28.820 に答える
0

最初の printf の最後に \n または endl を使用するだけで十分です

于 2009-05-07T03:23:35.703 に答える