0

我正在尝试用 C 编写一个简单的“打字机”效果,其中文本一次出现一个字母,但有延迟。这是我的功能:

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

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

问题是在显示 a 之前文本实际上并没有出现\n。我究竟做错了什么?

4

4 回答 4

3

输出到stdout被缓冲。使用\n你是在强制冲洗。如果要更改此设置,则需要更改终端的设置(对于 Linux 看这里)或使用

void typestring(const char *str, useconds_t delay)
{
    while (*str) {
        putchar(*(str++));
        fflush(stdout);
        usleep(delay);
    }
}
于 2013-04-22T08:18:42.757 回答
2

您的输出流可能已被缓冲,'\n'刷新缓冲区。

尝试fflush(stdoutputchar(),如

while (*str) {
        putchar(*(str++));
        fflush(stdout);
        usleep(delay);
    }
于 2013-04-22T08:18:50.867 回答
1

\n隐式强制输出设备刷新缓冲输入。要刷新,您应该明确使用fflush

 fflush(stdout);
于 2013-04-22T08:20:51.220 回答
0

输出流被缓冲,这就是为什么在显示 \n 之前文本实际上不会出现的原因 '\n' 刷新输出流(硬刷新)以手动执行相同的操作,您可以调用此函数 [ fflush(stdout) ]。

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

或者你可以使用

while (*str) {
            printf("%c\n",*(str++));
            usleep(delay);
        }
于 2013-04-22T09:07:37.340 回答