Linux环境下写一个进度条

来源:互联网 发布:苹果看图软件 编辑:程序博客网 时间:2024/06/07 16:59
源代码:
void prog()
{
   char prog_buf[102];
   memset(prog_buf,'\0',sizeof(prog_buf));
   char *sign="|/-\\";    //在进度条推进的时候,光标在以顺时针旋转
   int i=0;
   for(i=0;i<=100;i++)
   {
     prog_buf[i]='=';
     printf("[%-101s][%%%d][%c]\r",prog_buf,i,sign[i%4]);  
//显示进度条进度,[%-101s]表示显示的时候预留101个位置,-表示输出的时候左对齐,\r表示每次循环输出的时候回到上一次输出的位置
     fflush(stdout);
     usleep(100000);
   }
   printf("\n");
}
***********************************prog.c文件内容*******************************************

*************************************main.c文件内容****************************************

************************************prog.h文件内容******************************************

*************************************makefile文件内容***************************************

************************************进度条推进***********************************************







为什么会用到fflush函数?
请先看下面的例子
int main()
{
  printf("hello bit\n");
  sleep(3);
  return 0;
}
结果:先打印hello bit,再睡3秒,再返回
int main()
{
  printf("hello bit");
  sleep(3);
  return 0;
}
结果:先睡3秒,再打印,再返回
int main()
{
   printf("hello bit");
   fflush(stdout);   //刷新标准输出缓冲区中的内容
   sleep(3);
   return 0;
}
结果:先打印,再睡3秒,再返回
原因:标准输出默认为行缓冲,以\n为尾打印,若是没有\n,则先把输出内容写入输出缓冲区
在写进度条的时候,我们并不希望在下一次循环中换行输出,所以,输出的内容会先写到标准输出缓冲区中,所以需要用用fflush刷新标准输出缓冲区的内容输出





0 0