当前位置: 首页 > article >正文

【Linux】系统程序−进度条

文章目录

  • 一、准备知识
    • 1.回车与换行
      • 1.1 回车
      • 1.2 换行
    • 2. 行缓冲区
    • 3. 倒计时程序
  • 二、进度条程序
  • 1. 版本1

一、准备知识

在讲解进度条之前,先讲解几个概念

1.回车与换行

1.1 回车

回车:\r
作用:将光标移动到当前行的行首(水平回退,不换行)。
在这里插入图片描述

1.2 换行

换行:\n
作用:将光标移动到下一行的同一列(垂直移动,不回退)。
在这里插入图片描述
历史渊源:打字机时代,“回车”(Carriage Return)是让滚筒归位,“换行”(Line Feed)是推动纸张换行,两者需配合使用。
在 Windows 系统中,按下 Enter 键会产生回车(Carriage Return,\r)和换行(Line Feed,\n)两个动作,即 “\r\n” 组合。

2. 行缓冲区

先来看两个不同的现象:
有换行:
在这里插入图片描述
没有换行:
在这里插入图片描述
这种情况下,为什么"hello l1bo"不直接显示呢?没有显示,它去哪里了呢?
"hello l1bo" 没有消失,而是暂时存储在 stdout 的缓冲区中,直到程序结束才被刷新到屏幕。
缓冲区的刷新策略是行刷新,需要 \n 或手动刷新来触发显示。

如果想让"hello l1bo"立即显示,需要强制刷新缓冲区

#include <stdio.h>
#include <unistd.h>
int main() {printf("hello l1bo");fflush(stdout);  // 强制刷新缓冲区sleep(2);return 0;
}

3. 倒计时程序

每次输入后,光标都会移动到下一个位置
在这里插入图片描述
如果我们输入完一个数字后把光标回到原来位置,再次输入,重复上面的动作,也就可以形成倒计时小程序了。其实就是利用\r回车实现。
版本1:不复原光标位置
在这里插入图片描述
版本2:不强制刷新
在这里插入图片描述
版本3:
在这里插入图片描述
优化:
在这里插入图片描述
版本4:两位数字倒计时
在这里插入图片描述
优化:
%-2d-表示左对齐,2表示占两个字符位置
在这里插入图片描述

二、进度条程序

1. 版本1

实现以下基本功能,只展示进度条基本功能,后面还有V2版本。
在这里插入图片描述
第一步:创建一个process目录用来存放代码,并且把之前的Makefile文件拷贝到process目录中来,可以修改一下Makefile的可执行程序名称,不想改也可以不改。
在这里插入图片描述

第二步:创建process.h, process.c, main.c这三个文件
process.h写函数声明,process.c写函数实现,main.c
在这里插入图片描述
第三步:初步填写代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/2386486.html

相关文章:

  • Axure应用交互设计:动态面板嵌套实现超强体验感菜单表头
  • Linux(6)——第一个小程序(进度条)
  • CentOS:搭建国内软件repository,以实现自动yum网络安装
  • [Git] 认识 Git 的三大区域 文件的修改和提交
  • RISC-V 开发板 MUSE Pi Pro USB 测试(3.0 U盘,2.0 UVC摄像头)
  • 【520 特辑】用 HTML/CSS/JavaScript 打造浪漫炫酷的表白网页
  • 小米2025年校招笔试真题手撕(二)
  • 弱网服务器群到底有什么用
  • 部署Gitlab-CE with Docker私有云环境
  • 拉普拉斯高斯(LoG)滤波器掩模的注意事项
  • 铠大师:让用户畅享多元应用,助力鸿蒙生态发展
  • RocketMQ核心特性与最佳实践
  • springboot配置redis lettuce连接池,以及连接池参数解释
  • 基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统
  • 如何使用AI搭建WordPress网站
  • 打破双亲委派模型的实践:JDBC与Tomcat的深度解析
  • 《打破枷锁:Python多线程GIL困境突围指南》
  • Java并发编程:全面解析锁策略、CAS与synchronized优化机制
  • 2025第三届黄河流域网络安全技能挑战赛--Crypto--WriteUp
  • [爬虫知识] IP代理
  • 6个月Python学习计划 Day 1 - Python 基础入门 开发环境搭建
  • GraphPad Prism工作表的基本操作
  • Maven插件之docker-maven-plugin
  • 成年后还能学习多少知识,由大脑的这个数量决定
  • Flask 会话管理:从原理到实战,深度解析 session 机制
  • MySQL连接错误解决方案:Can‘t connect to MySQL server on ‘localhost‘ (10038)
  • 【跨端框架检测】使用adb logcat检测Android APP使用的跨端框架方法总结
  • lua脚本实战—— Redis并发原子性陷阱
  • 【MySQL】第10节|MySQL全局优化与Mysql 8.0新增特性详解
  • CSS相关知识