Linux进度条的实现

来源:互联网 发布:新数网络 编辑:程序博客网 时间:2024/05/16 09:26

回车与换行

符号   ASCII码   意义

回车   \r     13      光标重新回到本行开始位置,r是return的缩写

换行   \n     10   光标移动到下一行(不一定是行首),n是newline的缩写

 

进度条的原理

    进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度,剩余未完成任务量的大小,和可能需要处理时间,一般以长方形条状显示。

    进度条一般包括三个部分:1.进度条存在于一个区间,不断加载数据,直到区间加载满;2.会显示进度0%-100%;3.有时候还会有一个小圈,表示在进行加载;


清空缓冲区

函数名:fflush

功  能:清除文件缓冲区,文件以写的方式打开时将缓冲区文件写入文件

原  型:int fflush(FILE* stream)

用  法:fflush(stdout)刷新标准输出缓冲区,把输出缓冲区的东西打印到标准输出设备上


#include<stdio.h>int main(){    int i, c;    for (;;) {        fputs("Please input an integer: ", stdout);        if ( scanf("%d", &i) != EOF ) { /* 如果用户输入的不是 EOF */          /* while循环会把输入缓冲中的残留字符清空 */          /* 读者可以根据需要把它改成宏或者内联函数 */            while ( (c=getchar()) != '/n' && c != EOF )    {                  ;            } /* end of while */        }        printf("%d/n", i);    }    return 0;}
运行结果:
当输入数字时,正常;
当输入字母时,i的值不改变,printf输出的仍是上一次的值。由于输入缓冲区每次都被清空,所以也就不存在scanf自动不停读取缓冲区的值的情况。

      

实现过程

①成功安装ctags后,在工作区创建一个目录,并创建一个.c文件进入编辑

     

   
#include <stdio.h>#include <string.h>#include <unistd.h>void proc(){    int i = 0;    char bar[102]; //102里包括从到这个字符以及结尾的'\0'字符    const char* lable = "-\\|/";    memset(bar,0, 102*sizeof(char));    while(i <= 100)    {       bar[i]= '#'; //进度条的动态进程由#增长       printf("[%-100s][%d%%][%c]\r", bar, i,lable[i%4]);            //lable%4可以使字符串中的每一个字符交替动态显示       fflush(stdout);            //fflush()清空动态缓冲区,C语言下的缓冲区以行形式读取和存储,所以如果没有遇到\n,       //缓冲区不会将数据映射到显示器上,为直接进入sleep函数,所以需要强制刷新       i++;       usleep(100000);    }    printf("\n");}int main(){    proc();    return 0;}


②创建Makefile进行编辑

输入make指令,会生成test.c的可执行程序test,然后运行./test即可看到结果

           

④./test运行程序

           


           


0 0
原创粉丝点击