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

int main(void)
{
        int i=0;
        while(i<10)
        {
                printf("%d", i);
                usleep(10000); // or sleep(1)
                i++;
        }
        return 0;
}

我希望程序持续10秒,即打印1-等待1秒-打印2-等待1秒,依此类推直到结束。但是它并没有这样做-它只等待所有时间(10秒),然后将整个数字数组打印在一起,而它们之间没有任何时间延迟,它只是一次打印0123456789。
编辑:我尝试用sleep()而不是usleep,但它是相同的
如何解决?为什么会这样呢?

最佳答案

您的输出缓冲区未刷新。默认情况下,当流中出现新行时,将写入输出。将您的printf更改为此:

printf("%d\n", i);

或尝试以下方法:
printf("%d", i);
fflush(stdout);

另外,如果要删除行缓冲行为,则可以使用 setvbuf() _IONBUF模式。

10-04 14:32
查看更多