iis服务器助手广告
返回顶部
首页 > 资讯 > 操作系统 >【Linux】编写第一个小程序:进度条
  • 136
分享到

【Linux】编写第一个小程序:进度条

linuxc语言小程序 2024-01-21 16:01:51 136人浏览 泡泡鱼
摘要

文章目录 1. 预备知识1.1 简单认识几个函数1.1.1 sleep()1.1.2 fflush()1.1.3 usleep()1.1.4 memset() 1.2 缓冲区1.3 回车

文章目录


在这里插入图片描述

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 1void process();
// processbar.c#include "processbar.h"#include #include const char* lable = "|/-\\";// version 1void process(){    char buffer[NUM];    memset(buffer, '\0', sizeof(buffer));    int cnt = 0;    int n = strlen(lable);    buffer[0] = Head;    while (cnt <= 100)    {        printf("[%-100s][%3D%%][%c]\r", buffer, cnt, lable[cnt % n]);        fflush(stdout);        buffer[cnt++] = Body;        if (cnt < 100)        {            buffer[cnt] = Head;        }        usleep(50000);    }    printf("\n");}

2.4 执行效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3. 编写升级版的进度条

  • 上面的进度条算是一个进度条吗?我们的进度条似乎在一个人玩单机呀,这样的进度条是没有意义的。
  • 进度条的进度应该是依赖于其他应用的,比如下载。
  • 下面我们模拟一个下载环境,并修改进度条,使进度条可以根据下载的进度,同步进行显示进度的工作。

3.1 代码实现

// processbar.h#pragma once#include #define NUM 103#define Body '='#define Head '>'typedef void (*callback_t)(double);// 函数指针类型// version 2void process_flush(double rate);
// processbar.c#include "processbar.h"#include #include const char* lable = "|/-\\";// version 2: 进度是多少,你进度条能知道吗?另外,什么进度?依附于其他应用的,比如下载char buffer[NUM] = {0};void process_flush(double rate){    static int cnt = 0;    int n = strlen(lable);    if (rate <= 1.0)    {        buffer[0] = Head;    }    printf("[%-100s][%.1f%%][%c]\r", buffer, rate, lable[cnt % n]);    fflush(stdout);    buffer[(int)rate] = Body;    if ((int)rate + 1 < 100)    {        buffer[(int)(rate + 1)] = Head;    }    if (rate >= 100.0)    {        printf("\n");    }    cnt++;    cnt %= n;}
// main.c#include "processbar.h"#include #include #include // 模拟文件大小#define FILESIZE (1024 * 1024 * 1024)// 模拟一种场景,表示一种下载任务void download(callback_t cb)    // 回调函数的形式{    srand(time(NULL) ^ 1023);   // 这样写只是为了让随机数更随机    int total = FILESIZE;    while (total)    {        usleep(10000);  // 下载动作        int one = rand() % (1024 * 1024);  // 一次下载的大小        total -= one;        if (total < 0)        {            total = 0;        }        // 当前的进度是多少?        int download = FILESIZE - total;        double rate = (download * 1.0 / FILESIZE) * 100.0;        cb(rate);    }}int main(){    download(process_flush);    return 0;}

3.2 执行效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


END

来源地址:https://blog.csdn.net/m0_73156359/article/details/135515275

--结束END--

本文标题: 【Linux】编写第一个小程序:进度条

本文链接: https://www.lsjlt.com/news/556155.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【Linux】编写第一个小程序:进度条
    文章目录 1. 预备知识1.1 简单认识几个函数1.1.1 sleep()1.1.2 fflush()1.1.3 usleep()1.1.4 memset() 1.2 缓冲区1.3 回车...
    99+
    2024-01-21
    linux c语言 小程序
  • 【Linux】在Linux上写一个进度条小程序
    👑作者主页:@安 度 因 🏠学习社区:StackFrame 📖专栏链接:Linux 文章目录 一、前言二、理解 '\r' 与 '\n'三、行缓冲1、提出问题2、认识行缓冲3、解...
    99+
    2023-08-19
    linux 运维 服务器 vim 进度条
  • Linux | 手把手教你写一个进度条小程序
    文章目录 一、前言二、理解 '\r' 与 '\n'1、可显字符与控制字符2、老式键盘 三、缓冲区的概念理解1、五个代码段 + 现象分析2、观察现象,提出问题❓3、行缓冲的概念 + 疑难解...
    99+
    2023-08-31
    linux 运维 服务器
  • 《Linux从练气到飞升》No.07 Linux第一个小程序-进度条的实现
    🕺作者: 主页 我的专栏C语言从0到1探秘C++数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的...
    99+
    2023-08-16
    linux 小程序 运维 服务器 开发语言
  • 【Linux】从0到1实现一个进度条小程序
    个人主页:🍝在肯德基吃麻辣烫 我的gitee:gitee仓库 分享一句喜欢的话:热烈的火焰,冰封在最沉默的火山深处 文章目录 前言一、理解回车 '\r' 和换行 '\n'二、初步认识缓冲区1. 认识第一个...
    99+
    2023-08-16
    linux 小程序 apache 进度条
  • #4 编写第一个程序
    前言 前面三节为Python程序的运行打下了坚实的基础,是骡子是马拉出来遛遛,所以从这节开始,将开始正式进入Python的编程环节,唯有不忘初心,才能方得始终! 一、Python交互模式编写 学习任何一门语言,都要有仪式感,比如中文的第一...
    99+
    2023-01-30
    第一个 程序
  • Linux新手小程序——进度条
    前言 目录 前言 需要先了解        1.\r和\n                           2.缓冲区 一.理解字符的含义:         学习c语言时,我们可以粗略把字符分为可显字符和控制字符.         ...
    99+
    2023-08-31
    linux c++ c语言 小程序
  • 【Linux取经路】进度条小程序
    文章目录 一、预备知识1.1 回车换行1.2 缓冲区 二、倒计时2.1 注意事项 三、进度条3.1 源代码3.2 代码分析3.2 实际使用场景 一、预备知识 1.1 回车换行 一般意义上的回车换行是两个独立的独立的...
    99+
    2023-08-16
    linux 小程序 运维
  • 【Linux旅行记】进度条小程序
    文章目录 一、预备知识1.1回车换行1.2缓冲区 二、倒计时三、进度条3.1普通版本源代码3.2高级版本源代码 🍀小结🍀 🎉博客主页:小智_x0___0x_ &#...
    99+
    2023-08-16
    linux 运维 小程序 c语言
  • Linux小程序:倒计时和进度条
    Linux小程序 在Linux中我们实现两个小程序来体会\r和\n的区别,以及缓冲区是什么? 文章目录 Linux小程序前言回车和换行的区别缓冲区 小程序的实现倒计时程序进度条程序 总结 前言 回车和换行的区别 对...
    99+
    2023-08-16
    linux 小程序 进度条 倒计时
  • SpringBoot入门编写第一个程序Helloworld
    目录1.系统要求2.HelloWorld2.1创建maven工程2.2引入依赖2.3创建主程序2.4编写业务2.5测试2.6简化配置2.7简化部署1.系统要求 Java 8 Mave...
    99+
    2024-04-02
  • 使用原生JavaScript编写一个进度条功能
    这期内容当中小编将会给大家带来有关使用原生JavaScript编写一个进度条功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。进度条实现介绍使用JavaScript实现进度条功能。原理:通过鼠标移动事件,...
    99+
    2023-06-06
  • 学习笔记编写vue的第一个程序
    目录1、编写一个html,第一个vue程序注意视图模板和数据判断循环事件 787原则el属性data属性template属性methods属性render属性compute...
    99+
    2024-04-02
  • 怎么用Java编写一个小程序
    编写Java小程序的步骤如下:1. 安装Java开发工具包(JDK):从Oracle官网下载并安装最新版本的JDK。2. 配置开发环...
    99+
    2023-10-18
    java
  • 怎么写第一个Python3程序
    今天小编给大家分享一下怎么写第一个Python3程序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。第一个Python3.x程...
    99+
    2023-06-17
  • 【闪击Linux系列P7】进度条小程序の深度解剖
    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY的《...
    99+
    2023-08-16
    linux vim 运维
  • python编写第一个交互程序步骤示例教程
    Input()函数编写 1.编写一个稍微复杂一点的程序。使用Input()函数编写一个请用户输入名字的程序。 (1)打开IDLE开发环境,然后选择“File”...
    99+
    2024-04-02
  • 用python编写一个小程序,如何用python编写软件
    大家好,给大家分享一下用python编写一个小程序,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 1、python可以写手机应用程序吗? 我想有人曲解意思了,人家说用python开发渣蔽一个手机app,不是说用手机敲写py...
    99+
    2023-10-22
    python
  • 学会Python开发的第一步:写一个桌面小程序
    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 当使用桌面应用程序的时候,有没有那么一瞬间, 想学习一下桌面应用程序开发? 建议此次课程大家稍作了解不要浪费太多时间, 因为没有哪家公司会招聘以为Python程序员...
    99+
    2023-08-17
    python 小程序 pycharm
  • 微信小程序进度条怎么实现
    这篇文章主要介绍“微信小程序进度条怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序进度条怎么实现”文章能帮助大家解决问题。progress进度条。属性名类型默认值说明percentF...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作