在控制台中移动光标和打印字符不适用于睡眠

Aru*_*s23 1 c unix linux terminal

我想在同一个地方一个一个地打印一个字符序列。我打印一个字母,然后在睡眠状态下等待 1 秒钟,使用控制台代码将光标向左移动一列,打印下一个字母等等。问题是程序等待所有睡眠的总和(在我的示例中为 2s),然后只打印最后一个字符('y')。nanosleep 也是如此,等待信号而不是睡眠。如何使它工作?

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

int main()
{
    printf( "H" );
    sleep( 1 );
    printf( "\033[1D" );
    printf( "e" );
    sleep( 1 );
    printf( "\033[1D" );
    printf( "y" );
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 5

输出到stdoutprintf写入的地方)默认(当连接到终端时)line buffered。这意味着在缓冲区已满、打印换行符或显式刷新它时(使用fflush)刷新输出(实际上是写入到终端)。

在您的情况下,由于您从不填充缓冲区并且不打印换行符,因此您需要fflush(stdout)在每次调用sleep.