我刚刚开始熟悉 sleep(),我发现
#include<stdio.h>
int main()
{
int i=0;
printf("*********Testing Sleep***********\n");
for(i=0;i<10;i++)
{
printf("%d",i);
sleep(1);
}
return 0;
这不会在每次迭代时打印数字,而是在退出循环时转储所有数字.... 但是当我修改 printf 时...
#include<stdio.h>
int main()
{
int i=0;
printf("*********Testing Sleep***********\n");
for(i=0;i<10;i++)
{
printf("%d\n",i);
sleep(1);
}
return 0;
现在我添加了 '\n' 新行,它按预期工作......为什么它在前一个中表现得很奇怪......
最佳答案
这是因为输出缓冲区没有被刷新(换句话说,实际上提交给终端)。当你写一个换行符时,输出缓冲区更有可能被刷新(但在某些情况下并不总是)。许多终端实现这样做是为了提高性能。要强制执行您想要的行为,您需要在每次 printf
调用后调用 fflush(stdout);
,如下所示:
#include<stdio.h>
int main()
{
int i=0;
printf("*********Testing Sleep***********\n");
for(i=0;i<10;i++)
{
printf("%d",i);
fflush(stdout);
sleep(1);
}
return 0;
}
关于c - 由于 sleep() 导致的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6870518/