c - 为什么我的 nanosleep 不起作用...?

标签 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;
}

最佳答案

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

在 nanosleep 之前放置一个 fflush(stdout); 以强制它立即打印。

关于c - 为什么我的 nanosleep 不起作用...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16780265/

相关文章:

c++ - PROT_EXEcflags在 mprotect 中有什么作用?

c - 如何在 C 语言中获取当前语言环境的格式化日期和时间?

java - Netty 抛出 IndexOutOfBoundsException

javascript - 如何在终端中显示和刷新数据而不持续追加数据?

java - 将标准输出重定向到 Java 中的字符串

bash - 缩进长行标准输出

c - Cortex-M0+ 的预定义 cpu 目标宏

c - switch 语句中的变量定义

node.js - 如何在自定义 through2 流中内部链接流

java - 从 ByteArrayOutputStream 修剪填充