Linux课程四课---Linux第一个小程序(进度条)

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
​🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言、C++和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


进度条

  • **作者前言**
  • 预备知识
  • 入门进度条
  • 复杂进度条

预备知识

缓冲区
我们在Linux中写一段程序暂停的代码,使用make执行
C文件:
在这里插入图片描述
makefile文件
在这里插入图片描述
当我们执行make生成可执行文件,并运行的时候,就会发现,程序停留三秒才打印出来,让我们以为该程序是先运行sleep的.其实不是,C语言的顺序结构是从上往下执行代码,
原因:
程序休眠的时候sleep已经跑完,进而得知,代码中输出的字符串被保存了,
因为C对IO函数提供了一个缓冲区,我们如果刷新缓冲区(在字符串后面添加\n)或者程序结束就会打印字符串出来.
fflush(stdout):也是刷新缓冲区

回车与换行
在我们的经常使用回车键的时候是往下一行,然后光标移动到下一行的开始,(包含了回车和换行)其实真正的换行只是换行,光标没有移动到下一行的开始,,回车就是光标移动到当前行的开始
在C语言中, "\r"表示回车
在这里插入图片描述

入门进度条

思路:
在这里插入图片描述
每次我们多打印一个字符,下一秒我们就回车,然后打印新的字符串,直到进度条满了

1 #include<stdio.h>2 #include<unistd.h>3 #include<stdlib.h>4 #include<string.h>5 #define MAX 1016 #define LABLE '='7 8 int main()9 {10   char bar[MAX];11   memset(bar, '\0',sizeof(bar));12   int i = 0;13   for(i = 0; i < MAX - 1; i++)14   {15     printf("%s\r", bar);16     fflush(stdout);17     usleep(100000);                                                                                                                                                                                           18     bar[i] = LABLE;19   }20   printf("\n");21 22   return 0;//程序结束:23 }

在这里插入图片描述

复杂进度条

我们要想在linux中写一个进度条,使用到的知识就是make这个指令,
首先我们先创建四个文件, Test.h 、Test.c 、main.c, makefile.头文件用来声明, Test.c用来定义函数,
main.c文件用来汇总, makefile文件里面写入执行代码
makefile文件:
在这里插入图片描述
需要注意的是,我们生成 一个总的可执行文件main, 必须先生成Test,c和Test.c的二进制文件,然后链接成一个总的可执行文件,如果只生成其中一个执行文件,就会报错
Test.c

#include"Test.h"
const char* strs="\\-|/";
void process()
{char buffer[M];memset(buffer,'\0', sizeof(buffer));int i = 0;int size = strlen(strs);for(i = 0; i <= 100; i++){if(i < 100)buffer[i] = NEXT;printf("[%-100s][%3d%%][%c]\r", buffer, i, strs[i%size]);fflush(stdout);buffer[i]=NUM;usleep(100000);}
}
//复杂的进度条
void process1()
{int total = FILESIZE; srand(time(NULL)^1023);while(total){int one = rand()%(1024*1024*10);total -= one;if(total < 0)total = 0;int num = FILESIZE - total;double date = (num*1.0 / (FILESIZE))*100.0;//usleep(100000);//printf("%lf\n", date);rate(date);}}
char buffer[M] = {0};
void rate(double num)
{int d = num;int size = strlen(strs);static int cnt = 0;cnt = d;if(d == 0)buffer[0]=NEXT;printf("[%-100s][%3d%%][%c]\r", buffer, d, strs[cnt%size]);fflush(stdout);buffer[cnt++]=NUM;if(cnt < 100)buffer[cnt] = NEXT;usleep(100000);if(d == 100)printf("\n");
}

Test.h

#pragma once
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<time.h>
#define M 103
#define NUM '#'
#define NEXT '>'
#define FILESIZE 1024*1024*1024
typedef void(*FUN)(double);
//version 1
void process();//version 2void process1();
void rate(double num);

main.c

**#include"Test.h"
int main()
{//process();process1();return 0;
}**

如果想要给进度条有颜色可以去网上查找相关 的 C语言的printf颜色输出

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

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

相关文章

从入门到精通:深入解析IO流之FileWriter类的使用技巧!

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

前端面试拼图-知识广度

摘要&#xff1a;最近&#xff0c;看了下慕课2周刷完n道面试题&#xff0c;记录并添加部分可参考的文档&#xff0c;如下... 1. 移动端H5 click有300ms延迟&#xff0c; 如何解决&#xff1f; 背景&#xff1a;double tap to zoom 移动端H5中的300ms点击延迟问题通常是由浏览…

从零开始学习在VUE3中使用canvas(三):font(字体)

一、简介 我们可以使用font在canvas中绘制文字&#xff0c;方式如下: const ctx canvas.getContext("2d"); // 绘制文字 ctx.font "24px 黑体, 宋体"; //字体大小 首选字体 备选字体 ctx.fillText("这里是显示的字的内容", 100, 50); //文字…

[QJS xmake] 非常简单地在Windows下编译QuickJS!

文章目录 前言准备C编译器xmake编译包 工程准备修改版本号第一遍编译第二遍编译效果 前言 quickjs是个很厉害的东西啊&#xff0c;我一直想编译一下的&#xff0c;奈何一直没成功。现在找了点时间成功编译了&#xff0c;写篇文章记录一下。当前版本&#xff1a;2024-1-13 应该…

OkHttp

文章目录 OkHttp概要1.简介2.特点3.基本组成5.工作流程 拦截器1.简介2.内置拦截器3.自定义拦截器 连接池1.简介2.常用参数配置选项 Dispatcher和线程池1.简介2.重要方法3.DispatCher中的双端队列4.总结 OkHttp 概要 1.简介 OkHttp是一个开源的HTTP客户端&#xff0c;用于在J…

留学文书可以彻底被AI取代吗?升学指导这一职业是否会被AI逼到墙角?

近日&#xff0c;ChatGPT再次“进化”&#xff0c;其最新版本ChatGPT-4又掀高潮。其生产者OpenAI 称&#xff0c;“ChatGPT-4是最先进的系统&#xff0c;能生产更安全和更有用的回复。”和上一代相比&#xff0c;GPT-4拥有了更广的知识面和更强的解决问题能力&#xff0c;在创意…

机器学习_聚类(k-means)

文章目录 聚类步骤k-means APIKmeans性能评估指标Kmeans性能评估指标API 聚类步骤 k-means通常被称为劳埃德算法&#xff0c;这在数据聚类中是最经典的&#xff0c;也是相对容易理解的模型。算法执行的过程分为4个阶段。 1.首先&#xff0c;随机设K个特征空间内的点作为初始的…

详细分析Mysql中的LOCATE函数(附Demo)

目录 1. 基本概念2. Demo3. 实战 1. 基本概念 LOCATE()函数在SQL中用于在字符串中查找子字符串的位置 它的一般语法如下&#xff1a; LOCATE(substring, string, start)LOCATE()函数返回子字符串在主字符串中第一次出现的位置 如果未找到子字符串&#xff0c;则返回0 具体的…

Vue/Uni-app/微信小程序 v-if 设置出场/退出动画(页面交互不死板,看起来更流畅)

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 在Vue.js中&#xff0c;使用v-if进行条件渲染时设置动画可以通过<transition>组件来实现。 具体操作步骤如下&#xff1a; 包裹条件渲染的元素&#xff1a;您需要将要通过v-if控制显示隐藏的元素包裹在<transition…

keil软件不能连接STM32,烧录程序无法执行

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 问题现象解决方法 问题现象 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 最近在学习江科大的STM32的时候&#xff0c;学到11-2 硬件SPI读写W2…

跳绳计数,YOLOV8POSE

跳绳计数&#xff0c;YOLOV8POSE 通过计算腰部跟最初位置的上下波动&#xff0c;计算跳绳的次数

HTML静态网页成品作业(HTML+CSS)——个人介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

Linux:Gitlab:16.9.2 (rpm包) 部署及基础操作(1)

1.基础环境 我只准备了一台gitlab服务器&#xff0c;访问就用真机进行访问&#xff0c;接下来介绍一下详细配置 centos7 内网ip:192.168.6.7 外网ip:172.20.10.4 运行内存&#xff1a;4G CPU:4核 先去配置基础环境 关闭防火墙以及selinux 再去下载基础的运行…

有趣且重要的JS知识合集(20)screen/client/scroll/offset等坐标属性知识点

1、线上链接地址 浏览器坐标属性 2、screen系列 2.1、screenX&#xff1a; 鼠标位置相对于用户屏幕水平偏移量 2.2、screenY&#xff1a; 鼠标位置相对于用户屏幕垂直偏移量 3、client系列 3.1、clientX: 鼠标位置相对于文档的左边距&#xff08;不随页面滚动而改变&a…

【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列三:Faster R-CNN图文详解

【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列二&#xff1a;Fast R-CNN图文详解 概念预设 感受野 感受野(Receptive Field) 是指特征图上的某个点能看到的输入图像的区域。 神经元感受野的值越大表示其能接触到的原始图像范围就越大&#xff0c;也意味着它…

LeetCode链表hard 有思路?但写不出来?

给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值…

用docker启动centos的桌面环境

最近在dockerhub看见centos的桌面镜像 拉取镜像&#xff1a;docker pull kasmweb/centos-7-desktop:1.14.0 VNC_PWpassword输入你自己的密码 运行容器&#xff1a;docker run --rm -it --shm-size512m -p 6901:6901 -e VNC_PWpassword kasmweb/centos-7-desktop:1.14.0 该镜…

Python 实现1~100之间的偶数求和

result0 for i in range(101):if i%20:result result i print(result) 或者 result0 for i in range(2,101,2):result result i print(result)

【附下载】3Ds Max从安装、配置到入门提高和高级用法

#3Ds Max 一、安装 1.1 安装说明 地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1lwKMbgbE32wCL6PpMv706A?pwddll8 提取码&#xff1a;dll8 –来自百度网盘超级会员V2的分享 安装说明&#xff1a;文件夹里有安装说明 安装解压即可 关键就是将crack文件放到自己…

LVS+Keepalived 高可用群集--部署

实际操作 LVS Keepalived 高可用群集 环境设备 LVS1192.168.6.88 &#xff08;MASTER&#xff09;LVS2192.168.6.87 &#xff08;BACKUP&#xff09;web1192.168.6.188web2192.168.6.189客户端192.168.6.86VIP192.168.6.180 &#xff08;一&#xff09;web服务器 首先配置…