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 ...”,然后等待,然后打印“完成”,而是先等待,然后打印整行,这与我的想法不完全一致。

我想这与编译器的自动优化有关。
无论如何,我该怎么做才能获得所需的输出?

我在 OSX 10.5.6 上使用 XCode 3.1

谢谢你,
巴斯蒂安

4

3 回答 3

21

问题是您的打印被缓冲了。临睡前,调用 fflush(stdout); 刷新缓冲区

于 2008-11-12T19:00:43.383 回答
2

编译器无法重新排序打印和休眠,因为它们是 C 抽象机的“外部可观察行为”。

你得到的是由于标准输出缓冲。您可以使用 fflush 或打印到未缓冲的 stderr。

于 2008-11-13T14:14:28.820 回答
0

只需在第一个 printf 的末尾使用 \n 或 endl 就足够了

于 2009-05-07T03:23:35.703 回答