linux 下实现一个进度条

倒计时

理解

在这里插入图片描述
printf 打印的内容是被放在输出缓冲区的
fflush(stdout) 刷新 输出缓冲区;\n 也是一种刷新的策略我们称之为行刷新

linux 下实现一个进度条_第1张图片
理解一下回车换行
首先:回车是回车 换行是换行

回车是回到这一行的开头
换行是换到下一行

所以我们平时使用的 Enter 键 其实是执行了两个操作的
\r 表示的是只回车的意思

下面是一个倒计时代码

具体实现

 #include
 #include
 
 int main()
 {
  int cnt = 9;
 while(cnt)
 {
   printf("%d\r",cnt);                                                                                                             
   fflush(stdout); //这一步的目的是刷新缓冲区,如果没有这一步你啥也看不到
   cnt--;
}

它的原理就是只回车不换行让新的数字覆盖掉原来的数字
需要注意的是你需要刷新一下缓冲区如果不刷新缓冲区的话,你打印的内容就在缓冲区中 显示器上就啥也看不见

进度条的推进

原理:

第一次打印一个:#
然后只回车到行首
第二次打印两个:##
然后只回车到行首
第三次打印三个:###
这样进行下去,在视觉上就是一个进度条的推进了

  #include"process.h"
  #include
  #include
  
  // 函数的定义
  
   
  #define SIZE 101
  #define MAX_RATE 100
  #define STYLE '#'
  #define STIME 1000*40
 
 
  const char *str = "|/-\\";
 
  
  void process()
  {
    //version 1
    int rate = 0;  //循环
    char bar[SIZE]; //#号的个数
    memset(bar,'\0',sizeof(bar));
 
   int num = strlen(str);
 
   while(rate <= MAX_RATE)
   {
      printf("[%-100s][%d%%][%c]\r",bar,rate,str[rate%num]);//rate%num 是为了防止越界                                               
      fflush(stdout);
      usleep(STIME);
      bar[rate++] = STYLE;
 
   }
     printf("\n");
    }

你可能感兴趣的:(linux)