C 在给出换行符之前,不使用usleep显示输出

C 在给出换行符之前,不使用usleep显示输出,c,terminal,output,putchar,C,Terminal,Output,Putchar,我正试图用C语言编写一个简单的“打字机”效果,文本一次显示一个字母,并有延迟。以下是我的功能: #include <stdio.h> #include <unistd.h> void typestring(const char *str, useconds_t delay) { while (*str) { putchar(*(str++)); usleep(delay); } } #包括 #包括 void typest

我正试图用C语言编写一个简单的“打字机”效果,文本一次显示一个字母,并有延迟。以下是我的功能:

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

void typestring(const char *str, useconds_t delay)
{
    while (*str) {
        putchar(*(str++));
        usleep(delay);
    }
}
#包括
#包括
void typestring(常量字符*str,使用秒延迟)
{
while(*str){
putchar(*(str++));
usleep(延迟);
}
}

问题是在显示
\n
之前,文本实际上不会显示。我做错了什么?

到标准输出的输出被缓冲。使用
\n
您正在强制刷新。如果要更改此设置,则需要更改终端的设置(对于Linux外观)或使用


stdout
的输出被缓冲。使用
\n
您正在强制刷新。如果要更改此设置,则需要更改终端的设置(对于Linux外观)或使用


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

putchar()
之后尝试
fflush(stdout
,如下所示

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

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

putchar()
之后尝试
fflush(stdout
,如下所示

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

\n
隐式强制输出设备刷新缓冲输入。要刷新,应显式使用:


\n
隐式强制输出设备刷新缓冲输入。要刷新,应显式使用:


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

while (*str) {
        putchar(*(str++));
        fflush(stdout);
        usleep(delay);
    }
或者你可以使用

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

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

while (*str) {
        putchar(*(str++));
        fflush(stdout);
        usleep(delay);
    }
或者你可以使用

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

你是说
stdout
?不管怎样,一旦我做了更改,它就工作得非常完美。非常感谢!你应该刷新
stdout
而不是
stdin
。不确定,但这里的智者已经多次警告我不要使用fflush(stdin)。你是说
stdout
?不管怎样,一旦我做了更改,它工作得就完美无缺了。非常感谢!你应该刷新
stdout
而不是
stdin
。不确定,但这里的智者已经多次警告我不要使用fflush(stdin)。我已经多次被警告不要使用fflush()东西,尤其是fflush(stdin)我已经完全放弃使用fflush()。有谁能在不使用fflush()的情况下为这个打字机问题提供一个替代解决方案吗?我不知道在Windows中是否可能,但在Linux中,你可以使用
并将终端设置为非缓冲。看看我帖子中的链接,我已经多次被警告不要使用fflush()我已经完全放弃使用fflush()了,特别是fflush(stdin)。有谁能在不使用fflush()的情况下为这个打字机问题提供一个替代解决方案吗?我不知道在Windows中是否可能,但在Linux中,你可以使用
并将终端设置为非缓冲。请看我文章中的链接