C输出的小问题
2011年4月10日 08:36
想要在终端下实现一个类似进度显示的效果,用以下代码并没有效果,
#include <stdio.h>
#include <unistd.h>
int main()
{
int i = 0;
for(;i<101;i++)
{
printf("%3d",i);
usleep(50000);
printf("\b\b\b");
}
return 0;
}
但是调试的时候似乎又没有错误,但是当在
printf("%3d",i);
后面添加上一个\n时,
printf("%3d\n",i);
似乎usleep()函数运行是正常的,按说应该能达到预计的效果,但为什么什么都没有呢?
当将for循环换作如下时:
for(;i<101;i++)
{
printf("%3d ",i);
usleep(50000);
}
会发现并没有逐渐输出1,2,3,。。。,而是在最后的一瞬间所有的内容全部跳出来了,可见原因很简单,并不是程序没有输出,而是被系统缓存起来了,所以只要刷新输出,就会有预想效果了。
以下是最后的效果:
#include <stdio.h>
#include <unistd.h>
int main()
{
int i = 0;
for(;i<101;i++)
{
printf("%3d%%",i);
usleep(50000);
fflush(stdout);
printf("\b\b\b\b");
}
return 0;
}