因睡眠而导致的奇怪行为()

kHA*_*OOm 3 c

我刚刚熟悉睡眠(),我发现了

#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;
Run Code Online (Sandbox Code Playgroud)

}

这不会打印每次迭代的数量而是在循环时转储所有数字....但是当我修改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;
Run Code Online (Sandbox Code Playgroud)

}

现在,当我添加'\n'新行时,它按预期工作...为什么它在前一个行为奇怪......

Del*_*ani 7

这是因为输出缓冲区没有被刷新(换句话说,实际上已提交给终端).当您编写换行符时,输出缓冲区更可能(但在某些情况下仍然不总是)刷新.许多终端实现都是为了提高性能.要强制执行所需的操作,您需要fflush(stdout);在每次printf调用后调用,如下所示:

#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;
}
Run Code Online (Sandbox Code Playgroud)