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