Linux————Linux下进度条的实现(加彩色版本)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FangXiaXin/article/details/82811722

一:进度条
关于进度条不用我多说,当我们在安装程序或者软件时通常会看到软件安装进度,而这个给我以视觉感受的进度表示,通常被叫做进度条。
二:进度条需要的知识储备
缓冲区:
对于缓冲区这个概念我们其实并不陌生,它是能够存储固定数量的容器后者是一个存储器,或者分段运输区,其数据可被存储一共后续检索。C库的写入文件函数一般是全缓冲方式,像printf、fwrite库函数是自带缓冲区的,而只有我们达到一种缓冲方式我们就可以刷新缓冲区,以下是缓冲区的几种类型:
1.行缓冲:一行的末尾只要有‘\n’我们即可刷新缓冲区。
2. 全缓冲:把缓冲区写满,立刻刷新缓冲区。
3. 无缓冲:系统调用无缓冲区函数。
当我们没有遇到“\n”时,缓冲区不会立刻显示数据的,而进入sleep函数时,实际上cpu执行的是sleep之前的程序,因为没有遇到“\n”,数据仍被放在缓冲区中,不会被刷出,此时我们需要强制刷新缓冲区,用fflush()函数当我们没有遇到“\n”时,缓冲区不会立刻显示数据的,而进入sleep函数时,实际上cpu执行的是sleep之前的程序,因为没有遇到“\n”,数据仍被放在缓冲区中,不会被刷出,此时我们需要强制刷新缓冲区,用fflush()函数。
三.简单版本的进度条的实现

int main(void)
{
        char shift[4] = {'-','\\','|','/'};//用来制作动态旋转的图像
        char bar[100] = {0};//进度条动态增长的图形表示
        int i = 0;
        for(;i<=100;i++)
        {
                bar[i] = '#';
                printf("[%-100s][%c][%d%%]\r",bar,shift[i%4],i);
                fflush(stdout);//强制刷新缓冲区
                usleep(100*1000);//控制增长速度,睡眠函数
        }
        printf("\n");
        return 0;
}

在这里插入图片描述
四:可以用来装逼的版本(带颜色的进度条)
首先我们得了解如何让它带颜色
1.下面是一些关于颜色的代码:
在这里插入图片描述
前景光标设置
在这里插入图片描述
背景光标设置
在这里插入图片描述
2.接下来我们在代码中用一下这写设置看看到底如何来使用颜色配置

#include<unistd.h>

int main()
{
        printf("\33[31m 红色字体\33[0m\n");
        printf("\33[45m\33[31m 紫色背景 红色字\33[0m\n");
        printf("\33[45m\33[31m\33[4m\33[1m 紫色+红色+高亮+下划线\33[0m\n");
        return 0;
}

效果如下:
在这里插入图片描述
3.当我们做好了这些铺垫之后,我们就可以入手写一个带颜色的进度跳了

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>

int main(void)
{
        char shift[4] = {'-','\\','|','/'};//用来制作动态旋转的图像
        char bar[100] = {0};//进度条动态增长的图形表示
        int i = 0;
        for(;i<=100;i++)
        {
                bar[i] = '#';
                printf("\33[35m\33[1m[%-100s][%c]\33[0m[%d%%]\r",bar,shift[i%4],i);
                fflush(stdout);//强制刷新缓冲区
                usleep(100*1000);//控制增长速度,睡眠函数
        }
        printf("\n");
        return 0;
}

效果如下:
在这里插入图片描述
下面我们还可以让它更高大上一点:
让它成为一个矩形的进度条而不是“#”号
让它变成矩形增长我只需要变"#"为空格即可

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>

int main(void)
{
        char shift[4] = {'-','\\','|','/'};
        char bar[100] = {0};
        int i = 0;
        for(;i<=100;i++)
        {
                bar[i] = ' ';
                printf("\033[47m\033[30m\033[1m %s\r%d%%\033[0m",bar,i);
                fflush(stdout);
                usleep(100*1000);
        }
        printf("\nDown.\n\033[?25h");
        return 0;
}


效果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/FangXiaXin/article/details/82811722