C 在给出换行符之前,不使用usleep显示输出
我正试图用C语言编写一个简单的“打字机”效果,文本一次显示一个字母,并有延迟。以下是我的功能: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
#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中,你可以使用
并将终端设置为非缓冲。请看我文章中的链接