我想写一个应该打印类似
的小程序测试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" );
其中sleep_time
为2。
然而,不是首先打印“测试CPU ...”,然后等待,然后打印“完成”,它首先等待,然后打印整行,这不是我想到的。
我认为这与编译器的自动优化有关 无论如何,我该怎么做才能获得所需的输出?
我在OSX 10.5.6上使用XCode 3.1
谢谢你,
巴斯蒂安
答案 0 :(得分:21)
问题是您的打印是缓冲的。在睡觉前,请拨打fflush(stdout);刷新缓冲区
答案 1 :(得分:2)
编译器无法重新排序打印和睡眠,因为它们是C抽象机器的“外部可观察行为”。
你得到的是stdout缓冲。您可以使用fflush或打印到未缓冲的stderr。
答案 2 :(得分:0)
只需在第一个printf末尾使用\ n或endl就足够了