【Linux从入门到精通】C语言模拟实现进度条小程序

这篇具有很好参考价值的文章主要介绍了【Linux从入门到精通】C语言模拟实现进度条小程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Linux从入门到精通】C语言模拟实现进度条小程序 

  在Linux下,我们安装软件时会经常看到进度条,来告知我们安装的进度。我们不妨自己模拟实现一个进度条,看看其中的细节。模拟实现进度条并不困难,但其中的细节我们又不可忽视。本篇文章会对模拟实现进度条进行详解

文章目录

一、进度条整体模板

二、输出缓冲区详解

三、模拟实现进度条思路及代码详解

3、1 回车和换行区别

3、2 模拟实现进度条思路详解

3、2、1 初阶进度条

3、2、2 进阶进度条


🙋‍♂️ 作者:@Ggggggtm 🙋‍♂️

👀 专栏:Linux从入门到精通 、高频面试问题👀

💥 标题:模拟实现进度条小程序 💥

 ❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️

【Linux从入门到精通】C语言模拟实现进度条小程序

一、进度条整体模板

  谈到进度条,我们首先想到的是一个动态表示进度的显示程序。 首先,我们先来看一下进度条整体的模板,也就是我们所要模拟实现的进度条。如下:

模板1:

【Linux从入门到精通】C语言模拟实现进度条小程序

模板2:

【Linux从入门到精通】C语言模拟实现进度条小程序

  我们看到,上述有两个模板,两个模板大同小异,只是输出格式不同而已。我们似乎已经有了一个大概的整体思路。无非就是格式打印输出嘛。真的是这样吗?确实是这样。但并不只是单纯的输入和输入。其中还涉及到了缓冲区和回车、换行的概念和细节。我们接着往下看。

二、输出缓冲区详解

  我们平常使用的printf函数,是输出到屏幕。但是是直接输出到屏幕的吗?我们看下面的例子:

#include<stdio.h>      
    
int main()    
{    
  int i=0;    
  for(i=5;i>=0;i--)                                                                                                                                          
  {    
    printf("%d",i);      
    sleep(1);  //睡眠1秒
  }    
  return 0;    
}

  我们看上述代码,输出结果是什么呢?我们第一反应是每间隔一秒依次输出5、4、3、2、1、0。我们直接看结果:

【Linux从入门到精通】C语言模拟实现进度条小程序

  我们看到并非每间隔一秒依次输出5、4、3、2、1、0。而是过了6秒后直接输出了5、4、3、2、1、0。这是为什么呢?从这例子,我们间接了解到输出并非直接输出到屏幕上。那中间还有什么呢?其实,我们输出是先输出到了缓冲区。缓冲区又分为输入缓冲区输出缓冲区。这里明显的是先输出到了输出缓冲区。【Linux从入门到精通】C语言模拟实现进度条小程序

  我们再看一个例子:

#include<stdio.h>      
    
int main()    
{    
  int i=0;    
  for(i=5;i>=0;i--)                                                                                                                                          
  {    
    printf("%d\n",i);       
    sleep(1);  //睡眠1秒
  }    
  return 0;    
}

  上面的代码相对于第一个例子,我们多了一个换行。我们再看一下输出结果:

【Linux从入门到精通】C语言模拟实现进度条小程序

  我们看到是每间隔一秒依次输出5、4、3、2、1、0。这又是为什么呢?这就关系到了把输出缓冲区的内容刷新到屏幕上的规则:

  1. 程序正常结束,作为main函数return操作的一部分,缓冲区被刷新。
  2. 当缓冲区的内容满了的时候,缓冲区会自动刷新到屏幕上。
  3. 可以使用操作符endl、fflush和 ends 来显示的刷新缓冲区。这三个都是IO库中的操作符,endl能完成换行和刷新缓冲区的工作。flush只完成刷新缓冲区的工作。而ends会向缓冲区插入一个空字符,然后刷新缓冲区。

  了解到了输出缓冲区的刷新规则后,我们对上面的两个例子的输出结果就很容易理解了。当然,我们讲解了这么多输出缓冲区是为什呢?我们先回到模拟实现进度条,我们打印的进度条,是在一行上打印出的,并没有换行。这里就引出了两个问题怎么做到不换行还能不断动态更新打印数据呢怎么及时打印出缓冲区的数据呢?我们接着往下看。

三、模拟实现进度条思路及代码详解

3、1 回车和换行区别

  我们上面的问题是:怎么做到不换行还能不断动态更新打印数据呢?首先换行( \ n )是不可以的。这里我们就可以用回车( \ r )啊???换行和回车不一样吗?答案是不一样的

  回车 \r 本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return。

  换行 \n 本义是光标往下一行(不一定到下一行行首,还有可能是接上一行 行末另起一行。),n的英文newline,控制字符可以写成LF,即Line Feed。

  但是回车并不能刷新缓冲区。所以我们还要用到fflush(stdout)来刷新缓冲区到屏幕上。我们可结合下面例子一起理解一下:

#include<stdio.h>    
#include<unistd.h>    
    
int main()    
{    
  int i=0;    
  for(i=5;i>=0;i--)    
  {    
    printf("%d\r",i);                                                                                                                                        
    fflush(stdout);    
    sleep(1);    
  }    
  return 0;    
} 

  通过不断的在同一行输出,我们可以得到一个类似倒计时的小程序,具体输出结果如下:

【Linux从入门到精通】C语言模拟实现进度条小程序

  通过上面的例子,我们可以很好的理解回车和换行的区别。同时又解决了上述的两个问题。 

3、2 模拟实现进度条思路详解

3、2、1 初阶进度条

  首先,我们想到的是进度条完成是达到百分之百。那我们可以定义一个长度为105字符数组,这里多5个位置,是为了防止越界造成不必要的麻烦注意,打印字符串时遇到‘\0’停止)。我们可通过100次循环,不断改变字符数组内容,再同过回车(\r)和格式化输出,我们就可以得到一个初步形式的进度条。我们结合代码一起理解:

#include<stdio.h>    
#include<unistd.h>    
#include<string.h>    
    
#define MAX 105    
    
int main()    
{    
  int i=0;    
  char bar[MAX];    
    
  memset(bar,0,sizeof(bar));   //初始化字符数组为0
      
  while(i<=100)    
  {    
    printf("[%-100s][%3d%%] \r",bar,i,);     
    fflush(stdout);    
    
    bar[i]='#';    
    i++;    
    usleep(50000);    
  }    
    
  printf("\n");    
  return 0;     
}   

  上面我们可以看到有usleep函数。sleep函数睡眠时间是以秒为级别的。usleep是以微妙级别的。usleep(50000)也就是睡眠0.05秒。循环100次一共是睡眠5秒,也就是我们5秒多一点可以完成打印整个进度条。我们看输出结果:

【Linux从入门到精通】C语言模拟实现进度条小程序

3、2、2 进阶进度条

  我们为了表示进度条在运行,我们可在最后加上一个旋转的字符表示正在运行。怎么加一个旋转的字符呢?我们可创建一个字符数组,存储旋转字符的不同状态。进而通过循环来控制字符旋转。我们可看如下代码:

#include<stdio.h>    
#include<unistd.h>    
#include<string.h>    
    
#define MAX 100    
    
int main()    
{    
  int i=0;    
  char bar[MAX+5];    
    
  memset(bar,0,sizeof(bar));    
    
  const char* arr="|\\-/";    //旋转字符数组
  while(i<=100)    
  {    
    
    printf("[%-100s][%3d%%] %c\r",bar,i,arr[i%4]);                                                                                                           
    fflush(stdout);                                                                                                                     
                                                                                                                                        
    bar[i]='#';

    //bar[i] = '-';
    //bar[i+1] = '>';     //另一种格式                                                                                       
    i++;                                                                                                                                
    usleep(50000);                                                                                                                      
  }                                                                                                                                     
                                                                                                                                        
  printf("\n");                                                                                                                         
  return 0;                                                                                                                             
}

  我们直接看输出结果:

【Linux从入门到精通】C语言模拟实现进度条小程序

  最后会有一个动态表示的字符。这样看起来就会比较完整。当然,输出的格式我们可以自己选择。输出的颜色也可通过查询添加到自己的输入格式当中。

  以上就是整个用C语言实现的进度条。其中有很多细节还是比较重要的,需要我们重点掌握。希望本篇文章会对你有所帮助,感谢观看ovo~ 文章来源地址https://www.toymoban.com/news/detail-436401.html

到了这里,关于【Linux从入门到精通】C语言模拟实现进度条小程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 『Linux升级路』进度条小程序

    🔥 博客主页: 小王又困了 📚 系列专栏: Linux 🌟 人之为学,不日近则日退 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 目录 一、预备知识 📒1.1缓冲区 📒1.2回车和换行 二、倒计时 📒2.1源代码 📒2.2注意事项 三、进度条 📒3.1源代码 📒3.2实际应用 我们先观察两段代码的现象

    2024年02月05日
    浏览(30)
  • 【Linux旅行记】进度条小程序

    最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门

    2024年02月14日
    浏览(27)
  • 【Linux取经路】进度条小程序

    2024年02月14日
    浏览(30)
  • 【Linux】进度条小程序——深度解剖(细节满满)

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月14日
    浏览(27)
  • 【Linux】进度条小程序の深度解剖(7)

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月06日
    浏览(34)
  • 【Linux】make/Makefile & 进度条小程序

    目录 一,认识 make/makefile 二,实例代码 1,依赖关系 2,原理 3,项目清理 4,测试讲解 三,Linux第一个小程序-进度条 game.h game.c test.c 程序详解   会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分

    2024年02月05日
    浏览(26)
  • 【Linux】进度条小程序的深度解剖(细节满满)

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月16日
    浏览(25)
  • 【闪击Linux系列P7】进度条小程序の深度解剖

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月13日
    浏览(31)
  • [Linux]手把手教你制作进度条小程序

    C语言中字符分为两种: 可显字符 控制字符 其中可显字符就是字符a这类的字符,控制字符就是n这种控制字符。 对于我们制作进度条,我们只需要关注两个控制字符: r – 进行回车操作 n – 进行换行加回车操作 说明: n本身是换行字符,但是C语言本身将其解析成了换行加回

    2024年02月14日
    浏览(36)
  • 手把手教你如何在Linux下写进度条小程序(附源码)

    录屏2023 进入ProgressBar这个目录之后,使用ls命令查看是否创建成功 编写makefile文件是为了,使用make命令构建我们的.c文件,生成可执行程序 把源码复制粘贴到我们对应的文件中 使用vim指令先打开头文件 按小写i,进入插入模式(Insert),直接拷贝上去 再按esc,直接输入:wq(

    2024年02月04日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包