C中循环内的sleep函数有问题

C中循环内的sleep函数有问题,c,sleep,output-buffering,C,Sleep,Output Buffering,我正在用C写一个代码,而sleep函数并没有按我所希望的那样工作 for(seq_n = 1; seq_n <= 3; seq_n++){ printf("Sequence %d:\n", seq_n); for(val_n = 1; val_n <= 5; val_n++){ seq[val_n] = rand() % 9; printf(" %d", seq[val_n]); } sleep(5); pr

我正在用C写一个代码,而sleep函数并没有按我所希望的那样工作

for(seq_n = 1; seq_n <= 3; seq_n++){
    printf("Sequence %d:\n", seq_n);
    for(val_n = 1; val_n <= 5; val_n++){
        seq[val_n] = rand() % 9;
        printf(" %d", seq[val_n]);
    }

    sleep(5);

    printf("\nType the Sequence: \n");
    for(val_n = 1; val_n <= 5; val_n++)
        scanf("%d", &seq_user[val_n]);
        checkSequence(seq, seq_user);
}
for(seq_n=1;seq_n更改为:

printf("\n");
sleep(5);
printf("Type the Sequence: \n");
输出被缓冲,直到换行。

更改为:

printf("\n");
sleep(5);
printf("Type the Sequence: \n");

输出缓冲到换行。

如果要打印到终端,则stdout是行缓冲的,即输出在内部缓冲区中累积,直到打印
\n
(如果输出不到终端,则stdout是块缓冲的,因此只有在缓冲区满时才会输出任何内容。)

要刷新缓冲区(即立即输出其内容),您需要

fflush(stdout);
在您的
睡眠
呼叫之前

要清除当前行,可以尝试

printf("\033[2K");  // erase the line the cursor is in

我假设您使用的是通用unix终端仿真器;这些转义序列是特定于系统的。

如果您要打印到终端,则stdout是行缓冲的,即输出在内部缓冲区中累积,直到您打印
\n
。(如果输出不发送到终端,则stdout是块缓冲的,因此只有在缓冲区满时才会输出任何内容。)

要刷新缓冲区(即立即输出其内容),您需要

fflush(stdout);
在您的
睡眠
呼叫之前

要清除当前行,可以尝试

printf("\033[2K");  // erase the line the cursor is in

我假设您使用的是一个通用的unix终端仿真器;这些转义序列是特定于系统的。

您应该在睡眠之前有一个
fflush(stdout);
,因为stdout是行缓冲的,数据只在每行之后写入。您应该有一个
fflush(stdout)
在睡眠之前…因为标准输出是行缓冲的,数据只在每行之后写入。