【Linux】编写第一个小程序:进度条
文章目录
- 1. 预备知识
- 1.1 简单认识几个函数
- 1.1.1 sleep()
- 1.1.2 fflush()
- 1.1.3 usleep()
- 1.1.4 memset()
- 1.2 缓冲区
- 1.3 回车与换行
- 2. 编写入门版的进度条
- 2.1 基本逻辑
- 2.2 美化效果
- 2.3 代码实现
- 2.4 执行效果
- 3. 编写升级版的进度条
- 3.1 代码实现
- 3.2 执行效果
1. 预备知识
1.1 简单认识几个函数
1.1.1 sleep()
unsigned int sleep(unsigned seconds);
- 作用:让程序休眠指定秒数,如:sleep(3); //让程序休眠3秒
- 与 Windows 上的 Sleep() 函数不同
- 需要包含头文件
1.1.2 fflush()
int fflush(FILE* stream);
- 作用:刷新缓冲区
- 需要传入一个流
- 需要包含头文件
1.1.3 usleep()
int usleep(useconds_t usec);
- 作用:让程序休眠指定微秒,如:usleep(100000); //让程序休眠100000微秒(0.1秒)
- 1秒 = 1000000微秒
- 需要包含头文件
1.1.4 memset()
void* memset(void* ptr, int value, size_t num);
- 作用:将 ptr 指向的内存块的前 num 个字节设置为指定的 value 值
- 返回设置后的 ptr
- 需要包含头文件
1.2 缓冲区
直接上代码观察现象
#include #include int main() { printf("you can see me "); sleep(3); return 0; }
执行效果图
- 首先要否定上面不切实际的想法,C语言是顺序执行的,所以 printf 函数一定先于 sleep 函数执行。
- 那为什么 3 秒后才打印到屏幕上呢?当然是因为缓冲区!
- printf 函数跑完后,输出的字符串是被保存到 C 对 IO 函数提供的一个缓冲区里了,在程序退出的时候,缓冲区中的内容才被刷新到屏幕上。
- 我们需要使用上面讲的 fflush 函数把缓冲区中的内容提前强制刷新到屏幕上,使用方法:fflush(stdout);
1.3 回车与换行
首先我要抛出一个概念:回车和换行是不一样的!
- 回车( \r ):把光标放到当前行的开始。
- 换行( \n ):把光标放到当前位置的下一行。
- 所以理论上来讲,‘\n’ 和 ‘\r’ 一起用才是我们理解中的”回车“,即:把光标放到下一行最开始的位置。
2. 编写入门版的进度条
2.1 基本逻辑
- 进度 1% 打印 1 个字符,回车到开始的位置,刷新缓冲区;
- 进度 2% 打印 2 个字符,回车到开始的位置,刷新缓冲区;
- …
- 进度 100% 打印 100 个字符,回车到开始的位置,刷新缓冲区,程序终止。
2.2 美化效果
- 进度条主体增加箭头显示
- 显示进度百分比
- 添加一个动态的旋转光标
2.3 代码实现
// porcessbar.h #pragma once #include #define NUM 103 #define Body '=' #define Head '>' // version 1 void process();
// processbar.c #include "processbar.h" #include #include const char* lable = "|/-\\"; // version 1 void process() { char buffer[NUM]; memset(buffer, '\0', sizeof(buffer)); int cnt = 0; int n = strlen(lable); buffer[0] = Head; while (cnt printf("[%-100s][%3d%%][%c]\r", buffer, cnt, lable[cnt % n]); fflush(stdout); buffer[cnt++] = Body; if (cnt
- 所以理论上来讲,‘\n’ 和 ‘\r’ 一起用才是我们理解中的”回车“,即:把光标放到下一行最开始的位置。
- 换行( \n ):把光标放到当前位置的下一行。
- 回车( \r ):把光标放到当前行的开始。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。