为什么我的纳米睡眠不起作用......?

时间:2013-05-27 20:38:26

标签: c stream stdout sleep

我已经编写了以下代码来逐字符地打印段落,间隔为0.3秒。但是当我编译并运行它时,它会打印出句子中的所有内容。为什么纳秒功能不起作用?

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

int main() {
    int i = 0;
    struct timespec t1, t2;
    t1.tv_sec = 0;
    t1.tv_nsec = 300000000L;

    char story[] = {"I want to print this story / letter by letter on the screen./"};
    while(story[i] != '\0') {
        if(story[i] == '/')
            sleep(1);
        else
            printf("%c", story[i]);
    nanosleep(&t1, &t2);
        i++;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:8)

您的代码正在以正确的时间间隔调用printf,但stdout将其缓冲区中的所有输出保留到最后。

在纳米睡眠前加fflush(stdout);迫使其立即打印。