C中循环内的sleep函数有问题
我正在用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
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)
在睡眠之前…因为标准输出是行缓冲的,数据只在每行之后写入。