在C循环内的睡眠功能有问题

时间:2019-04-02 21:44:13

标签: c sleep output-buffering

我正在用C语言编写代码,并且睡眠功能无法正常运行。

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);
}

当我运行该程序时,它首先出现“序列(数字)”,然后仅在5秒钟后才打印序列和短语“键入序列”,同时在整个循环中出现。 / p>

我希望“序列(数字)”与序列同时出现,并且仅在5秒钟后程序要求键入序列。此外,我想知道如何让5秒后序列消失。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

更改为:

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

输出缓冲直到换行。

答案 1 :(得分:1)

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

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

fflush(stdout);

在您进行sleep通话之前。

要清除当前行,您可以尝试

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

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