Linux小程序---进度条

一:\r 和 \n


\r --- 回车 --- 使光标回到这一行的开头

\n --- 换行 --- 会来到下一行与之平行的位置


缓冲区的问题:

<1>: \n 的示例

7c97922aa60446aa972890efc839996e.png

 正常输出 hehehehe 。

<2>: \r 的示例

为了方便观察,加入一个 sleep (休眠函数),使其休眠2秒,观察其结果:

10882bc123344becb4ac833c3a29bb5f.png

现象为:停顿两秒后,没有输出 hehehehe ,而是出现输入命令行。 

<3>: 两者对比

上述两种情况出现是行缓冲区存在导致的,\n 是一种刷新策略(行刷新),有刷新缓冲区的作用,所以它可以立即显示输出结果。而在 \r 的程序时,使用 printf 函数,每次打印一个字符,光标就会向后移动,当走到 \r 时,光标又会回到该行的起始位置,最终会被命令行提示符覆盖,导致程序得不到想要的结果。

<4>: 刷新输出缓冲区(ffush(stdout))

在休眠两秒之前,刷新输出缓冲区:

35f705ca83324cf5b85667081f543276.png

现象:hehehehe 程序运行后,立刻输出,光标始终位于一行的起始位置,两秒后,被命令行提示符覆盖掉。

 <5>: 不带 \r 和 \n 的情况

5a08c2363d50464290d9a70537a08179.png

运行现象为:先休眠两秒,然后输出hehehehe , 同一行后面输出命令行提示符。

我们知道,在C语言中代码的执行顺序是由上而下进行的,所以肯定是先执行的 printf 函数,然后执行  sleep 函数,但是代码的运行现象并非先打印后休眠,而是先休眠后打印 --- 为什么???

原因:hehehehe 没有被刷新,在 sleep 期间 hehehehe 一直保留在缓冲区中,直到程序结束,系统自动刷新缓冲区才会显示出来,所以我们观察到的现象为先休眠两秒,然后输出 hehehehe 。

二:进度条代码实现


1.倒计时示例

经过上述缓冲区问题,我们可以知道,\r 前面的内容如果要打印出来,需要及时刷新输出缓冲区(通过 fflush 函数实现),我们为了看到倒计时的结果,可以让其每隔一秒钟打印一次。

QQ录屏20231015215917

我们发现所得现象并不是我们理想的现象,若要得到理想状态的现象,需要修改 printf 的输出格式 

在此处,需要注意打印的格式,%2d 表示预留两个位置, %d 表示预留一个位置。

QQ录屏20231015220103

2.进度条(简易版)

 我们实现一个前面显示图形,然后显示加载进度,最后显示其是否在运行(或者卡住)的形式。

684889bf996b489e82819f49fccb5f0d.png

我们可以看到该代码,最后的结果会被命令行提示符覆盖掉,在此处,我们在最后使用 \n 刷新缓冲区。 

5bddec97786e49ddb4ece1e288fb8521.png

接下来,我们来解决,打印方向的问题,常规来说应该从右向左,在此处为从左向右,我们需要改变 printf 的输出格式。即在输出格式前面加 - 号。

7589a92c58da4c5f85d88970a116db20.png

接下来,我们来打印一个标识,来辅助说明,程序是否在运行:

a8d896762c764903ac7cd4554b78ccea.png

至此,一个简单的进度条就完成了。

我们观察一下动态版的进度条:

QQ录屏20231015233138

2.进阶版

结合具体的场景,实现进度条;示例为我们需要下载一个东西,其已经下载的大小和东西大小的比率来控制进度条的进度:

 我们观察一下动态的进度条:

QQ录屏20231016211813

3.美化版

我们的输出,一般都是黑底白字,其实 printf 函数可以实现彩色打印,在此处我们参考文章:printf函数彩色打印

在此处 我们对上述代码(printf函数部分)进行修改,使其可以进行彩色输出。

(示例代码为黄底白字):

我们观察一下动态的进度条:

QQ录屏20231016213031


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

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

相关文章

IDEA Gradle Lombok错误:找不到符号 setter getter方法没有

今天IDEA2022.3.3开个Gradle&#xff08;7.5版本&#xff09;项目&#xff0c;加入了Lombok依赖&#xff0c;依赖如下&#xff1a; dependencies {implementation group: org.springframework.boot, name: spring-boot-starter-web, version: 3.1.4compileOnly group: org.pro…

Druid连接池最小连接数设置失效问题

问题发现&#xff1a; 配置 当项目启动后 线程池确实是初始化了5条连接&#xff0c;但是当项目运行一段时间后&#xff0c;5条连接确消失了&#xff0c;只会程序用到得时候&#xff0c;再去初始化连接&#xff0c;这样有点违背了参数设置得意义&#xff0c;后来通过查阅资料发…

本地jar打包成maven依赖,上传到私服

本地打包jar成maven依赖 mvn install:install-file -Dfile“\oss\xmlBeans\rvdMsgWrapper.jar” -DgroupId“hk.gov.xmlBeans” -DartifactId“noNamespace” -Dversion“1.0.0” -Dpackaging“jar” 上传到私服 登录进入到Upload 页面 上传 上传完成&#xff0c;到仓库查看…

图像特征之SIFT

SIFT介绍 尺度不变特征转换即SIFT (Scale-invariant feature transform)是一种计算机视觉的算法。它用来侦测与描述影像中的局部性特征&#xff0c;它在空间尺度中寻找极值点&#xff0c;并提取出其位置、尺度、旋转不变量&#xff0c;此算法由 David Lowe在1999年所发表&#…

网络层哪些事?

在本文讲解的网络层中&#xff0c;注意了解一下&#xff1a;IP协议&#xff01; 地址管理&#xff1a;每个网络上的设备&#xff0c;要能分配一个地址&#xff08;唯一&#xff09;路由选择&#xff1a;A给B发消息&#xff0c;具体走哪条路线&#xff1f;&#xff1f; IP地址&…

小学数学题AI自动出题系统源码,支持在线打印及导出PDF!

今天给大家开发了个好东西&#xff0c;小学数学作业练习册AI自动出题网站源码&#xff0c;全面支持打印机打印机转成PDF文件&#xff0c;快给你家娃娃整一套吧&#xff0c;AI自动出题&#xff0c;让娃练习算数&#xff0c;解放双手&#xff0c;让您的孩子成绩蒸蒸日上&#xff…

ESP32单片机环境搭建(VScode + PlatformIO IDE)

一、环境搭建&#xff08;VScode PlatformIO IDE&#xff09; 1、官网下载VScode; 2、安装最新的插件&#xff08;C/C、PlatformIO IDE、python、Chinese&#xff09;&#xff1b; 3、在PlatformIO IDE中新建工程&#xff1a;Platforms——Projects——Create New Project——…

成都爱尔周进院长解读不同近视手术的不同度数要求

常有人这么问&#xff1a;我xx度了还能做近视手术吗?我才xx度也能做近视手术吗? 度数&#xff0c;确实是自己掌握地最清楚“最直观”的一个数据。 要说屈光手术的指标&#xff0c;有角膜曲率、角膜厚度、角膜地形等非常之多。 但这些数据不做详细检查自己根本不知道&#xff…

【Linux】Ubunt20.04在vscode中使用Fira Code字体【教程】

【Linux】Ubunt20.04在vscode中使用Fira Code字体【教程】 文章目录 【Linux】Ubunt20.04在vscode中使用Fira Code字体【教程】1. 什么是Fira Code字体2. 安装Fira Code字体3. 配置vscodeReference 1. 什么是Fira Code字体 Fira Code&#xff1a;是一种带有编程连字的等宽字体。…

【linux 0.11 学习记录】一、环境配置,用Bochs输出hello world

想学习linux&#xff0c;又不知道从哪里下手&#xff0c;体系太大&#xff0c;哪块内容都很多&#xff0c;无奈下选择了linux0.11作为入口&#xff0c;本系列将是学习笔记&#xff0c;希望能坚持下去吧 环境配置 这里使用win10bochs2.7 安装bochs 官网&#xff1a;https://b…

langchain主要模块(三):Chain

原文&#xff1a;langchain主要模块(三)&#xff1a;Chain_江小皮不皮的博客-CSDN博客 langchain2之Chain langchain 1.概念2.主要模块 模型输入/输出 (Model I/O)数据连接 (Data connection)链式组装 (Chains)代理 (Agents)内存 (Memory)回调 (Callbacks)3.链 • LLMChain&am…

中文编程语言开发工具开发的软件案例:定制开发扫码识别位置程序适用于车间物品摆放管理

中文编程语言开发工具开发的软件案例&#xff1a;定制开发扫码识别位置程序适用于车间物品摆放管理 中文编程语言开发工具开发的软件案例&#xff1a;定制开发扫码识别位置程序适用于车间物品摆放管理&#xff0c; 中文编程系统化教程&#xff0c;不需英语基础。学习链接 htt…

网站如何应对网络流量攻击

网络安全问题中&#xff0c;受到流量攻击是一种常见挑战。以下是一系列的专业建议&#xff0c;帮助您预防和减轻这类攻击&#xff0c;从而确保您的网站和数据的安全。 使用 Web 应用程序防火墙 (WAF) Web 应用程序防火墙是一项专门的安全工具&#xff0c;能够检测和拦截恶意流…

最新GMS地下水数值模拟教程

详情点击公众号链接&#xff1a;最新GMS地下水数值模拟教程 前言 GMS三维地质结构建模 GMS地下水流数值模拟 GMS溶质运移数值模拟与反应性溶质运移模 目标 1.GMS的建模数据的收集、数据预处理以及格式等&#xff1b; 2.GMS的建模流程&#xff0c;包括三维地质结构建模、直接…

【Flutter】第一篇基础:站在一名web前端开发者的角度看代框架

Flutter Flutter 是一个跨平台的 UI 工具集&#xff0c;它的设计初衷&#xff0c;就是允许在各种操作系统上复用同样的代码&#xff0c;例如 iOS 和 Android&#xff0c;同时让应用程序可以直接与底层平台服务进行交互。如此设计是为了让开发者能够在不同的平台上&#xff0c;…

Mistral AI发布一个拥有 73 亿参数模型Mistral 7B

导读法国人工智能初创公司 Mistral AI 宣布推出其首款大语言模型 Mistral 7B 是一个&#xff0c;号称是迄今为止同规模产品中最强大的语言模型&#xff1b;在 Apache-2.0 许可下开源&#xff0c;可完全免费使用&#xff0c;不受任何限制。 Mistral AI 是一个成立仅六个月的初创…

“第四十二天”

这个&#xff0c;之前用的b去存储a的总和和排名&#xff0c;后来在比较的过程中&#xff0c;只改变的b的值&#xff0c;却没有改变a的值&#xff0c;但在比较语文成绩的时候用的还是a&#xff0c;这个时候a和b同样是第i个对应的可能不是同一个对象了 &#xff0c;因为上面b的值…

12-网络篇-通信过程中的网络表

1.ARP表 主机1和主机2在同一个局域网内&#xff0c;通过之前的章节&#xff0c;我们知道在通信过程中&#xff0c;除了要知道对方的IP地址以外&#xff0c;我们还要知道对方的硬件地址&#xff0c;也就是Mac地址。而ARP协议就是为了解决此种问题。 ARP协议的用途是为了从网络层…

vector+算法sort与list+sort的效率比较,容易写错的地方原因探析

我写的代码&#xff1a; #include <iostream> using namespace std; #include <vector> #include <list> #include <algorithm> int main() {const int N 10000000;vector<int> v;list<int> l;for (int i 0; i < N; i){v.push_back(…

AcWing 5180. 正方形泳池

原题链接&#xff1a;5180. 正方形泳池 - AcWing题库 说实话题解和视频题解都不太好&#xff0c;有点过于复杂了&#xff0c;那就不得不记录一下我看视频题解衍生出的另一个较为简单的思路了。 根据答案形态出发&#xff0c;枚举所有这种形态找出最大值。 可以发现最大的泳池要…