Linux环境下写一个进度条

源代码:
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刷新标准输出缓冲区的内容输出





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值