想要在终端下实现一个类似进度显示的效果,用以下代码并没有效果,

#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;
}