直到一个换行符给出输出不与usleep显示(Output not displayed with us

2019-10-29 14:09发布

我想程序C,其中的文字出现在同一个延迟时间一个字母一个简单的“打字机”的效果。 这是我具备的功能:

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

void typestring(const char *str, useconds_t delay)
{
    while (*str) {
        putchar(*(str++));
        usleep(delay);
    }
}

问题是实际上没有出现,直到一个文本\n显示。 我究竟做错了什么?

Answer 1:

输出到stdout进行缓冲。 使用\n您强制刷新。 如果你想改变这一点,你需要更改终端设置(对于Linux看这里 ),或者使用

void typestring(const char *str, useconds_t delay)
{
    while (*str) {
        putchar(*(str++));
        fflush(stdout);
        usleep(delay);
    }
}


Answer 2:

你的输出流可能已经得到缓冲, '\n'刷新缓冲区。

尝试fflush(stdoutputchar()

while (*str) {
        putchar(*(str++));
        fflush(stdout);
        usleep(delay);
    }


Answer 3:

\n隐含地强制输出装置以冲洗缓冲的输入。 要刷新你应该明确地使用fflush

 fflush(stdout);


Answer 4:

输出流缓冲,这就是为什么文本实际上并不出现,直到一个\ n为显示“\ n”刷新输出流(硬红)做手工,你可以调用这个函数[fflush(标准输出)]相同。

while (*str) {
        putchar(*(str++));
        fflush(stdout);
        usleep(delay);
    }

或者您可以使用

while (*str) {
            printf("%c\n",*(str++));
            usleep(delay);
        }


文章来源: Output not displayed with usleep until a line break is given