目录
前言
Part1. 效果展示
Part2. 效果分析
Part3. 代码解析
Part3.1. processbar.c
Part3.2. main.c
Part3.3. processbar.h
Part4. 总结与反思
Part5. 结语
前言
进度条相信大家都不陌生,在下载资源的时候经常会见到,所以我们也来模拟实现一下进度条的表现吧。
let's go!!!!!!!!
Part1. 效果展示
Part2. 效果分析
<1>:模拟实现下载完后的流程,也就是显示下载完毕和下载了多少资源,也可以显示速度。
<2>:随着下载的进行,显示符号,表示下载进度。
<3>:显示下载了多少资源,以百分比的形式呈现。
<4>: 用一根斜杠不断旋转表示下载的不断进行。
也就是我们要用代码来实现各个模块。
Part3. 代码解析
Part3.1. processbar.c
#define NUM 144 #define ch '#' #define speed 1 void processbar(int process) { static int cnt = 0;//利用这个变量达到每次都能刷新斜杠的样子 达到旋转的效果 cnt %= 4;//控制大小 不能越界 char buf[NUM + 1];//将要打印的字符存在这里 memset(buf, 0, NUM + 1);//全部置0 方便后续的printf终止 char fmt[64];//存储printf格式控制符 char lable[4] = { '|', '/', '-', '\\' };//存储斜杠的不同样式 值得注意的是最后一个 由于\为转义字符 所以为了不让他将后面的单引号转义了 所以我们要先使用这个把他转义了 for (int i = 0; i < process; i++) { buf[i] = ch;//按照当前进度 填充数组 } sprintf(fmt, "[%%-%ds][%%6.2f%%%%][%%c]\r", NUM);//利用sprintf制作fmt 值得注意的是当我们要保留%d不期望它是作为后面变量的类型引导时 我们要用两个%% printf(fmt, buf, process * 100 / (double)NUM, lable[cnt]);//打印进度 cnt++;//++改变下一次的斜杠 fflush(stdout);//强制刷新 防止打印不出来的情况发生 } void DownLoad() { double cur = 0;//代表当前进度 while (cur <= NUM) { processbar(cur);//打印进度条 usleep(50000);//sleep 代表下载所需要的时间 cur += speed;//++进度 } printf("\ndownload done,all %d MB\n", NUM);//打印最终结果 }Part3.2. main.c
#include "processbar.h" int main() { DownLoad();//代表多次下载 DownLoad(); DownLoad(); DownLoad(); DownLoad(); return 0; }Part3.3. processbar.h
#pragma once #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> void processbar(int process); void DownLoad();
Part4. 总结与反思
这项目关键还是在于复习C语言的函数和规范我们的代码,比如我们要常利用#define来定义我们过程中具有常数属性的变量,避免魔法值遍地。
还有就是在我们实现函数的时候我们要注意高内聚、低耦合,这是我们项目可维护的关键。
Part5. 结语
这篇文章我们实现了下载中进度条项目,接下来,小编还会带来更多Linux相关的知识,敬请期待~
最后,祝大家可以:春风得意马蹄疾,一日看尽长安花!
最后的最后,要是觉得本文还可以的话,可以点点赞,关注小编一波,谢谢大家!~