在Linux下用C语言实现简单的进度条

相信我们在平时使用电脑进行下载文件的同时都会看到一个进度条,提示我们文件下载的进度,所以呢我们来自己实现一个简单的进度条:
首先我们来看一个生活中的进度条:
这里写图片描述
通过观察我们选择用以下方式来实现一个简单进度条:
1.依次打印‘#’;
2.后面标注百分比;

代码如下:

#include<stdio.h>
#include<unistd.h>
int main()
{
    int i = 0;
    char bar[120];
    const char *lable = "|/-\\";
    while (i <= 100)
    {
        printf("[%-100s][%d%%][%c]\r", bar, i, lable[i % 4]);
        fflush(stdout);
        bar[i] = '#';
        i++;
        bar[i] = 0;
        usleep(100000);
    }
    printf("\n");
    return 0;
}

运行结果:
这里写图片描述
这里写图片描述
备注:
fflush:
功能:清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件。
fflush 的返回值类型是int类型。如果成功刷新,fflush返回0。指定的流没有缓冲区或者只读打开时也返回0值。返回EOF指出一个错误。
fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃[非标准];
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上;
printf(“。。。。。。。。。。。”);后面加fflush(stdout);可提高打印效率。

彩色进度条
在上面进度条的基础上实现一个彩色进度条。
终端的字符颜色由转义序列控制,是文本模式下的系统显示功能,与具体语言无关。转义序列以控制字符’ESC’开头。多数转义序列超过两个字符,故通常以’ESC’和左括号’[‘开头。该起始序列称为控制序列引导符,通常由’\033[‘或’\e[‘代替。


printf("\033[0;37m%s\033[0m","hello world");   

\033 是E的asc码,而这种是一个标记对,\033 是成对存在的.可以用e代替成\033
\033[ 后面的第一个参数是关闭所有文字的效果。

第二个参数是字体以及字体背景的颜色:
30-黑色,31-红色 ,32-绿色,33-黄色,34-蓝色,35-紫色,36-墨绿,37~39-白色
字体的背景色:
40-黑色,41-红色,42-绿色,43-黄色,44-蓝色,45-紫色,46-墨绿色,47-白色

第三个参数是字体的效果:
效果分为:1-高亮,4-下划线,5-闪烁,7-背景取反,2J—-清屏
最后一个m代表后面跟着要显示的字符串
这里写图片描述
这里写图片描述

模拟实现彩色进度条:

#include<stdio.h>
#include<unistd.h>
#define RED "\e[0;31m"
#define BLUE "\e[0;34m"
#define NONE "\e[0m"
#define GREEN "\e[0;32m"
#define YELLOW "\e[0;33;1m"
#define PURPLE "\e[0;35m"
#define GR "\e[0;36m"
 main()
{
    char bar[120];
    const char* lab = "|\-/-";
    int i = 0;
    while(i<=100)
    {
    if(i%10==1)
    {
       printf(RED"[%-100s][%d][%c]\r"NONE,bar,i,lab[i%4]);
    }
    else if(i%10==2)
    {
       printf(YELLOW"[%-100s][%d][%c]\r"NONE,bar,i,lab[i%4]);
    }
    else if(i%10==3) 
    {
       printf(BLUE"[%-100s][%d][%c]\r"NONE,bar,i,lab[i%4]);
    }
    else if(i%10==4)
    {
        printf(GREEN"[%-100s][%d][%c]\r"NONE,bar,i,lab[i%4]);
    }
    else if(i%10==5)
    {
        printf(PURPLE"[%-100s][%d][%c]\r"NONE,bar,i,lab[i%4]);

    }
        else
    {
        printf(GR"[%-100s][%d][%c]\r"NONE,bar,i,lab[i%4]);
    }
    fflush(stdout);
    bar[i] = '#';
    i++;
    bar[i]=0;
    usleep(100000);
    }
    printf("\n");
    return 0;

}  

效果如下:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值