我刚刚熟悉睡眠(),我发现了
#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'新行时,它按预期工作...为什么它在前一个行为奇怪......
这是因为输出缓冲区没有被刷新(换句话说,实际上已提交给终端).当您编写换行符时,输出缓冲区更可能(但在某些情况下仍然不总是)刷新.许多终端实现都是为了提高性能.要强制执行所需的操作,您需要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)