在Linux中实现一个进度条程序

在日常生活中,我们遇见过各种各样的进度条,那么我们今天就来编写一个进度条的代码吧!

在编写之前我们先要了解几个背景知识:

1、了解在Linux环境下的sleep函数

(1) sleep函数是让程序睡眠的

(2)函数名为sleep(),其函数原型为:
unsigned int sleep(unsigned int seconds); 参数为毫秒 (如果需要更精确可以用usleep,单位为微秒)

           1微秒=10^(-6)毫秒

(3) 使用sleep函数要加头文件

        #include <unistd.h> 

了解上述知识我们再来看两份代码:

这里写图片描述
程序运行结果:先输出you are so cute!再停顿3秒
这里写图片描述
程序运行结果:先停顿3秒再输出you are so cute!

那这是为什么呢?这两份代码唯一的不同就是printf函数中一份代码有‘\n’,一份没有。

在程序中printf函数一定是先于sleep函数运行的,那为什么第二个程序得结果是先停顿再打印内容的呢?这里其实是有关缓冲区的内容的。

printf函数是自带缓冲区的,且按行刷新的。在执行printf函数的过程中,并不是将结果直接输出到屏幕中,而是将结果保存在缓冲区,按行刷新。于是第一个程序在遇到‘\n’时,缓冲区刷新将you are so cute!打印出来。

2、fflush函数

fflush: 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时。我们的进度条程序需要的是一个字符一个字符的输出,这样防止了输出进度条的时候出现一段一段字符输出的情况

有了以上背景知识我们就先来看看我们实现进度条的具体代码吧!

#include<stdio.h>
#include<unistd.h>

int main()
{
    int i=0;
    char bar[102]="#";
    char* label="|/-\\";//\是特殊字符需要转义
    while(i<=100)
    {
         /*
         *   \033[3[0-7]m  //设置字体颜色
         *   \033[4[0-7]m  back //设置背景
         *   \033[0m  clear set //将前面的设置清除
         *
         */

      printf("\033[m\033[35m[%-100s][%d%%][%c]\033[m\r",bar,i,label[i%4]);
      //加-是左对齐,\r是每次都回到行首,%%是对%今次那个转义
      fflush(stdout);
      bar[i]='#';
      i++;
      usleep(50000);
    }
    return 0;
}

这就是我们的进度条代码了,在Linux中你首先要创建一个proc_bar的目录,在目录中先创建一个proc_bar.c的文件,在文件中写入以上代码(如图所示)

这里写图片描述

接着保存退出,运行此程序就可以成功实现一个带颜色的进度条,结果如下图

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值