Linux下进度条的简单实现

来源:互联网 发布:知否剧组照片 编辑:程序博客网 时间:2024/05/18 15:06

逻辑

   进度条实现的简单逻辑就是第一次输出一个字符,第二次输出两个字符…直到最后一直输出100个字符,但每次只显示一行,所以这就要明确一下“缓冲区”这个概念。
   简单的谈一谈缓冲区,每次我们使用scanf和cin时,输入的东西都不值是直接输入到我们想要输入的内存空间,而是全部储存到了输入缓冲区的stdin,在我们输入完成之后,即敲击回车键之后,缓冲区输入完成,编译器就会从缓冲区上拿走当前变量属于自己的一份内容(类型,数量等一一符合),然后开工作。在输出时,也是先输出到输出缓冲区stdout中,然后通过刷新或‘\n’ 或输满输出缓冲区然后再显示到屏幕上。
   ‘\n’在Linux、unix 中只表示换行,但不会回到下一行的开始位置。
   ‘\r’在Linux、unix 中表示返回到当行的最开始位置。
   所以我们在实现这个进度条的时候就要使用’\r’,而不是’\n’,因为我们只要每次显示一行。
   具体请看代码和代码中的注释。
  

#include <stdio.h>#include <unistd.h>int main(){    char buff[102]={' '};//102——包含两个"[","]"    char arr[]={'|','/','-','\\'};相当于windows鼠标双击等待时的旋转    int i=0;    while(i<=100)    {        printf("[%-100s]%d%\r",buff,i,arr[i%4]);        fflush(stdout);//刷新输出缓冲区        buff[i]='#';//给buff的第i个字符赋值为'#'        ++i;        buff[i]=' ';        usleep(100*1000); //睡眠0.1秒    }    fflush(stdout);    printf("\n");//换行,因为要输出下一句话,不然就会输入到最后一行'#'中    printf("download...\n");    return 0;}

  我还转载了一篇博客,他实现了进度条的彩色输出,是和Linux下的一些ANSI码有关的,有兴趣的可以去看看,有原文链接。

0 0