日期:2014-05-16  浏览次数:20675 次

sleep
在suse 10下编程,代码如下

C/C++ code

#include <stdio.h>
#include <unistd.h>

int main(void) {
    int i;
    for (i = 0; i < 4; i++) {
        printf("%d",i);
        sleep(1);
    }
    return 0;
}



执行,发现程序先等了4秒,再连续输出0123
试着把sleep(1)换成一个空循环,居然也会先全等完,再连续输出。
有没有人遇到过这种情况?这是为什么?

------解决方案--------------------
因为你的printf里面没有加\n的输出,这个时候的输出是保存在缓冲区里面的,并不会直接输出,要等程序结束的时候才会输出.
如果你需要马上输出,建议使用:
printf("%d\n",i);
如果你不希望换行,可以使用:
printf("%d",i);
fflush(stdout);