【项目分享-知识讲解】 Linux第一个项目--进度条的实现与解析


目录

前言

[Part1. 效果展示](#Part1. 效果展示)

[Part2. 效果分析](#Part2. 效果分析)

[Part3. 代码解析](#Part3. 代码解析)

[Part3.1. processbar.c](#Part3.1. processbar.c)

[Part3.2. main.c](#Part3.2. main.c)

[Part3.3. processbar.h](#Part3.3. processbar.h)

[Part4. 总结与反思](#Part4. 总结与反思)

[Part5. 结语](#Part5. 结语)


前言

进度条相信大家都不陌生,在下载资源的时候经常会见到,所以我们也来模拟实现一下进度条的表现吧。


let's go!!!!!!!!


Part1. 效果展示




Part2. 效果分析


<1> :模拟实现下载完后的流程,也就是显示下载完毕和下载了多少资源,也可以显示速度。

<2> :随着下载的进行,显示符号,表示下载进度。

<3> :显示下载了多少资源,以百分比的形式呈现。

<4> : 用一根斜杠不断旋转表示下载的不断进行。


也就是我们要用代码来实现各个模块。


Part3. 代码解析

Part3.1. processbar.c

cpp 复制代码
#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

cpp 复制代码
#include "processbar.h"

int main() {
    DownLoad();//代表多次下载
    DownLoad();
    DownLoad();
    DownLoad();
    DownLoad();
    return 0;
}

Part3.3. processbar.h

cpp 复制代码
#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相关的知识,敬请期待~
最后,祝大家可以:春风得意马蹄疾,一日看尽长安花!

最后的最后,要是觉得本文还可以的话,可以点点赞,关注小编一波,谢谢大家!~

相关推荐
another heaven10 小时前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
Code_Solitude10 小时前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
Zwawa14 小时前
让屏幕动起来:OLED动画效果,丝滑光标、帧动画和一只贪吃蛇
c语言·单片机·嵌入式
꧁细听勿语情꧂15 小时前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
§ꦿCFོ༉1 天前
嵌入式八股文—C语言入门学习(四)
c语言·开发语言·学习
Severus_black1 天前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
唐青枫2 天前
C 语言 strcpy() 用法详解与实战 Demo
c语言
程序猿打工仔2 天前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
꧁细听勿语情꧂2 天前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫2 天前
【C++——类和对象(上)】筑基篇:以封装奠定面向对象之基
c语言·开发语言·c++