linux下进度条的实现

news2024/10/6 22:26:25

一、代码一版

使用模块化编程

1.processbar.h

#include<stdio.h>
#define capacity 101 //常量使用宏定义
#define style '=' //符号方便后续修改
extern void processbar();

 修饰变量的时候一定要带extern,修饰函数的时候可以省略,因为没有函数体就表明它一定是声明

2.processbar.c

#include"processbar.h"
#include<string.h>
#include<unistd.h>
char* load ="|/-\\"; 
void processbar()
{
  char bar[capacity];
  memset(bar,'\0',sizeof(bar));
  int size = strlen(load);

  int cent = 0;
  while(cent <=99)
  {
   bar[cent++] = style;
   if(cent <= 99 )
   bar[cent] = '>';
   printf("[%-100s][%d%%][%c]\r",bar,cent,load[cent%size]);
   fflush(stdout);//没有\n就没法立即刷新,因为显示器模式是行刷新,因此手动刷新
   usleep(100000);//休眠xx微秒
  }
  printf("\n");
}

3.main.c

int main()
{
  processbar();
  return 0;
}

效果图,当进度未达到100时,在进度条最右端会有>,同时会有加载效果 由数组

char* load ="|/-\\";

进行实现 

二、代码二版 

processbar函数只负责打印,能更好地模拟下载过程

1.processbar.h

#include<stdio.h>
#define capacity 101
#define style '='
extern void processbar();

2.processbar.c

#include"processbar.h"
#include<string.h>
#include<unistd.h>
char* load ="|/-\\"; 
char bar[capacity];
void processbar(int cent)
{
  if(cent > 100 || cent < 0)return;
  int size = strlen(load);

   bar[cent++] = style;
   if(cent <= 99 )
   bar[cent] = '>';
   printf("[%-100s][%d%%][%c]\r",bar,cent,load[cent%size]);
   fflush(stdout);
   if(cent > 99)memset(bar,'\0',sizeof(bar));

}

3.main.c

#include"processbar.h"
typedef void(*callback_t)(int);//回调函数

void Download(callback_t cb)
{
  int total = 100;//100MB
  int curr = 0;
  while(curr < total)
  {
    //假设有一个下载
    usleep(50000);//模拟下载的时间
    int rate = curr * 100 / total;//更新进度

    cb(rate);//通过回调函数显示进度
    
    curr += 1;
  }
    printf("\n");
}
int main()
{
  Download(processbar);
  printf("\n");
  Download(processbar);
  return 0;
}

 

临近字符串具有自动链接功能例如

printf("helloworld")

printf("hello""world")

三、改变文字颜色

//颜色宏定义
#define NONE         "\033[m"
#define RED          "\033[0;32;31m"
#define LIGHT_RED    "\033[1;31m"
#define GREEN        "\033[0;32;32m"
#define LIGHT_GREEN  "\033[1;32m"
#define BLUE         "\033[0;32;34m"
#define LIGHT_BLUE   "\033[1;34m"
#define DARY_GRAY    "\033[1;30m"
#define CYAN         "\033[0;36m"
#define LIGHT_CYAN   "\033[1;36m"
#define PURPLE       "\033[0;35m"
#define LIGHT_PURPLE "\033[1;35m"
#define BROWN        "\033[0;33m"
#define YELLOW       "\033[1;33m"
#define LIGHT_GRAY   "\033[0;37m"
#define WHITE        "\033[1;37m"

使用方法

1.如果你想要让某一段文字变成某个颜色

printf(YELLOW"this print msg is yellow!\n"NONE);

这两个指令相当于 开关,可以放置在任意位置。

如果开启开关,后面的所有字的颜色都会变成这个颜色

开启后关掉的话只会让某一段文字变色 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1857121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

将Windows11右键菜单修改为Windows10风格

Windows11更新后&#xff0c;右键菜单很多功能隐藏起来了&#xff0c;使用时需要点击“显示更多选型”才能获取完整功能。为了能获得Windows10右键菜单丝滑的体验&#xff0c;我总结了以下方法。 方法一&#xff1a;控制台操作法 按住winR打开运行窗口 输入cmd&#xff0c;…

护眼灯和普通台灯有什么区别?劣质护眼台灯宣传的三大套路

护眼灯和普通台灯有什么区别&#xff1f;围绕这一问题的讨论颇多。然而&#xff0c;真正体验过护眼台灯的人会深知&#xff0c;它与普通台灯之间的差异远非一般&#xff0c;涉及照明效果、色温调节、蓝光控制、闪烁问题及功能性设计等诸多层面。为了让更多人透彻理解这两者之间…

【代码阅读】SSC:Semantic Scan Context for Large-Scale Place Recognition

一、主函数 官方开源的代码提供了四个主函数&#xff0c;其中eval_pair.cpp和eval_top1.cpp是一组&#xff0c;分别用于计算两帧的相似度分数以及一帧点云在所有的51帧点云中相似度最高的25帧的相似度分数。eval_seq.cpp是在eval_top1.cpp的基础上&#xff0c;给了一堆序列&am…

视频格式转换方法:如何使用视频转换器软件转换视频

众所周知&#xff0c;目前存在许多不同的视频和音频格式。但我们的媒体播放器、移动设备、PC 程序等仅兼容少数特定格式。例如&#xff0c;如果不先将其转换为 MP4、MOV 或 M4V 文件&#xff0c;AVI、WMV 或 MKV 文件就无法在 iPhone 上播放。 视频转换器允许您将一种视频格式…

[经验] candy是什么意思英语翻译 #笔记#其他#职场发展

candy是什么意思英语翻译 1、candy的意思 Candy是英语中的一个词汇&#xff0c;意思是糖果、糖果制品。Candy意为果脯的意思也不是很常见。 糖果是一种富含糖分的食品&#xff0c;主要由砂糖、粘合剂和食用色素等组成。糖果的种类可以很多&#xff0c;有硬糖、软糖、巧克力、…

OpenAI CTO米拉·穆拉提谈未来:AI一年半后达到博士水平

人工智能&#xff08;AI&#xff09;领域近年来的发展迅猛&#xff0c;特别是在大语言模型&#xff08;LLM&#xff09;的进步上。最近&#xff0c;OpenAI的首席技术官&#xff08;CTO&#xff09;米拉穆拉提&#xff08;Mira Murati&#xff09;在达特茅斯学院的一次采访中&am…

捷瑞数字业绩波动性明显:关联交易不低,募资必要性遭质疑

《港湾商业观察》施子夫 5月22日&#xff0c;山东捷瑞数字科技股份有限公司&#xff08;以下简称&#xff0c;捷瑞数字&#xff09;及保荐机构国新证券披露第三轮问询的回复&#xff0c;继续推进北交所上市进程。 从2023年6月递表开始&#xff0c;监管层已下发三轮审核问询函…

QT实现人脸识别

QT实现人脸识别 Face.pro文件&#xff1a; QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # d…

我在高职教STM32——LCD液晶显示(4)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

AIGC发展方向和前景

引言 背景介绍 AIGC的定义及其发展历程 AIGC&#xff0c;即人工智能生成内容&#xff0c;是近年来在人工智能领域兴起的一项重要技术。它通过使用机器学习和深度学习等技术&#xff0c;使得计算机能够自动生成各种形式的数字内容&#xff0c;如文本、图像、音频和视频等。 …

钢铁企业环保创A

朗观视觉小编观察发现&#xff0c;在当下全球环保浪潮的推动下&#xff0c;钢铁企业作为传统重工业的代表&#xff0c;正面临着前所未有的挑战与机遇。为了实现可持续发展&#xff0c;许多钢铁企业纷纷加入到环保创A的行列中&#xff0c;通过技术创新和管理升级&#xff0c;推动…

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据&#xff0c;优化了分类算法&#xff0c;支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类&#xff1b;一键生成危险点报告和交跨报告&#xff1b;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:289…

ONLYOFFICE8.1版本桌面编辑器测评

OO官方链接点这里&#xff1a;ONLYOFFICE 文档 8.1 现已发布&#xff1a;功能全面的 PDF 编辑器、幻灯片版式、优化电子表格的协作等等 | ONLYOFFICE 博客 一、界面与用户体验 整体布局和设计的美观性、易用性&#xff1a; ONLYOFFICE 8.1 版本的桌面编辑器展现出了令人眼前一亮…

电路学习——经典运放电路(2024.06.21)

参考链接1: 11个经典运放电路 在此感谢各位前辈大佬的总结&#xff0c;写这个只是为了记录学习大佬资料的过程&#xff0c;内容基本都是搬运的大佬博客&#xff0c;觉着有用自己搞过来自己记一下&#xff0c;如果有大佬觉着我搬过来不好&#xff0c;联系我删。 电路学习——经典…

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析 公务员作为一种稳定的职业选择&#xff0c;一直备受人们的关注。然而&#xff0c;就像任何其他职业一样&#xff0c;公务员职位也有其利与弊。本文将对公务员的利弊进行分析&#xff0c;帮助读者更好地了解这一职业的特点。 利&#xff1a; 1. 稳定的职业&a…

【C++】文件处理(IO流)

文章目录 C IO流1. C语言IO2. CIO2.1 C标准IO流2.2 C文件IO流2.3 C IO 文件常用函数总结表2.4 C stringstream C IO流 回顾一下&#xff0c;C语言中IO输入输出的 1. C语言IO C语言中常用的输入输出函数有如下几种&#xff1a;前者是格式化标准输入输出&#xff0c;后者是格式化…

GD32 串口接受异常的几个原因

前面我们介绍过GD32 485发送时出现异常的最常见原因&#xff0c;有小伙伴反馈想要知道GD32 串口接受异常的可能原因&#xff0c;今天我们就来安排。 一、波特率异常导致收发出错 我们知道&#xff0c;串口是异步通讯接口&#xff0c;通讯双方或者多方都需要工作在相同波特率下…

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. 泛型编程 首先让我们来思考一个问题&#xff0c;如何实现一个交换函数&#x…

(超详细)YOLOV7改进-Soft-NMS(支持多种IoU变种选择)

1.在until/general.py文件最后加上下面代码 2.在general.py里面找到这代码&#xff0c;修改这两个地方 3.之后直接运行即可

对撞指针技巧

对撞指针技巧 我们以LeetCode的一道题目来讲解一下对撞指针&#xff1b; LeetCode第27题移除元素&#xff0c;链接如下&#xff1a; https://leetcode.cn/problems/remove-element 如果使用快慢指针 如果使用快慢指针&#xff0c;将会有大量的后面元素赋值给前面元素的操作…