0

0

【Linux】第一个小程序——进度条实现

看不見的法師

看不見的法師

发布时间:2025-07-20 11:36:22

|

855人浏览过

|

来源于php中文网

原创

让我们对这篇文章进行伪原创处理,保持文章的大意不变,同时保留图片的位置和原始格式。

【Linux】第一个小程序——进度条实现

前言

在之前的学习中,我们已经掌握了vim编辑器、gcc/g++的使用以及make/makefile工具的应用。今天,我们将利用这些知识在Linux上编写第一个小程序——进度条。在实现进度条之前,我们需要先了解两个关键概念。

  1. 回车与换行的区别

在Linux系统中,\n\r是两个重要的转义字符,它们分别代表换行符和回车符,具有不同的功能和使用场景。

\n(换行符):【定义】\n表示换行符,英文全称为newline,控制字符为LF(Line Feed)。它将光标移动到下一行的开头,常用于分隔文本的不同行。【功能】在Linux系统中,\n用于表示文本的换行。当输入新的字符时,它们会在新的一行上输出,使得文本内容更加清晰易读。

\r(回车符):【定义】\r表示回车符,英文全称为return,控制字符为CR(Carriage Return)。它将光标移动到当前行的开头,但不会移动到下一行。【功能】在Linux系统中,\r用于在同一行上连续输出不同的内容。如果有新的字符输入,它们将覆盖已存在的字符。这使得在同一行内更新文本内容成为可能。

\n的主要功能是换行,将光标移动到下一行的开头;而\r的主要功能是回车,将光标移动到当前行的开头。

  1. 行缓冲区的概念

在Linux中,行缓冲区是一种用于存储输出数据的缓冲机制,直到满足特定条件后才将数据发送出去。行缓冲区按行存储数据,只有当输出数据中包含换行符时,才会发送数据。

这种缓冲机制对于需要批量输出的场景非常有用,可以提高效率。同时,我们也可以使用特定的函数来刷新缓冲区,强制将缓冲区中的数据发送出去。

在动态显示文本进度条时,我们利用的是\r回滚而非换行,因为无法满足输出数据的条件,这时我们需要借助fflush(stdout);函数。

  1. 进度条代码

代码语言:javascript 代码运行次数:0

运行 复制 ```javascript #include #include #include int main(){ //进度条代码 //1.数组存放字符 char bar[101];//最后存放/0 memset(bar, '#', 100); //旋转字符数组 char label[4] = "-\\|/";//反斜杠要两个进行转义 //2.循环打印 int i = 0; while (i

我们可以在Linux上使用vim编辑器创建progress.c文件,将上述进度条代码写入其中,然后利用make/makefile工具和gcc编译器将progress.c编译成可执行文件progress。在命令行中输入./progress即可运行该程序,结果如下:

【Linux】第一个小程序——进度条实现

清理文件时,我们可以使用make clean命令删除文件:

【Linux】第一个小程序——进度条实现

如果需要重新编译progress.c文件,我们也可以使用make命令来实现:

【Linux】第一个小程序——进度条实现

Makefile文件内容如下:

【Linux】第一个小程序——进度条实现

彩色进度条

在C语言中,直接进行彩色输出并不是标准的一部分,因为C语言本身不支持这种特性。然而,如果你在控制台环境下编写程序,并且目标环境如Linux或某些支持ANSI转义码的系统,你可以利用ANSI escape codes(ANSI转义序列)来模拟颜色输出。

假设你想在控制台上打印一段带颜色的文字,例如一条红色的消息"Hello, World!",你可以这样写:

代码语言:javascript 代码运行次数:0

运行 复制 ```javascript #include int main() { if (isatty(fileno(stdout))) { // 检查是否是终端 printf("\033[31m"); // 设置红色字体 printf("Hello, World!\033[0m"); // 打印消息并恢复默认颜色 } else { printf("Hello, World!"); // 对于非终端设备,如文件,直接打印纯文本 } return 0; }

在这个例子中,如果程序在终端上运行,它会显示红色的"Hello, World!";如果不是终端(如通过重定向输出到文件),则只显示普通的白色文字。

TURF(开源)权限管理系统
TURF(开源)权限管理系统

TURF(开源)权限定制管理系统(以下简称“TURF系统”),是蓝水工作室推出的一套基于软件边界设计理念研发的具有可定制性的权限管理系统。TURF系统充分考虑了易用性,将配置、设定等操作进行了图形化设计,完全在web界面实现,程序员只需在所要控制的程序中简单调用一个函数,即可实现严格的程序权限管控,管控力度除可达到文件级别外,还可达到代码级别,即可精确控制到

下载

对于颜色,通常会用到以下几种代码:

前景色:

  • 黑色: \033[30m
  • 红色: \033[31m
  • 绿色: \033[32m
  • 黄色: \033[33m
  • 蓝色: \033[34m
  • 青色: \033[36m
  • 紫色: \033[35m
  • 白色: \033[37m

背景色:

  • 黑色: \033[40m
  • 红色: \033[41m
  • 绿色: \033[42m
  • 黄色: \033[43m
  • 蓝色: \033[44m
  • 青色: \033[46m
  • 紫色: \033[45m
  • 白色: \033[47m

结束颜色设置: \033[0m\x1b[0m (等效)

当你想要结束颜色输出时,可以使用\033[0m来清除所有设置。但是请注意,这取决于终端是否支持这些转义码,以及用户终端配置。在Windows控制台上,由于其默认不支持ANSI转义码,上述方法可能无法生效。

因此,对于进度条代码,我们可以将其设置为我们喜欢的颜色,只需要在循环打印前后设置和取消字体颜色,代码如下:

【Linux】第一个小程序——进度条实现

然后我们使用make命令重新编译progress.c源文件:

【Linux】第一个小程序——进度条实现

运行结果如下:

【Linux】第一个小程序——进度条实现

模拟真实下载速度的进度条

我们需要使用随机数来模拟一次下载的进度,然后累加到进度条中,而不是一直维持一个速度下载,代码如下:

【Linux】第一个小程序——进度条实现

然后我们就可以使用随机数模拟下载了,结果如下:

【Linux】第一个小程序——进度条实现

然后就可以利用每次的下载量比例更新进度条,代码如下:

【Linux】第一个小程序——进度条实现

进度条打印效果如下:

【Linux】第一个小程序——进度条实现

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

391

2023.06.20

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

614

2023.07.25

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

353

2023.08.02

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

256

2023.08.09

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

597

2023.09.05

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

524

2023.09.20

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

640

2023.09.20

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

599

2023.09.22

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.3万人学习

Django 教程
Django 教程

共28课时 | 3.2万人学习

Excel 教程
Excel 教程

共162课时 | 12.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号