【Linux】带大家在Linux下写一个进度条小程序!

Linux下的一个进度条小程序

本篇文章笔者带大家完成一个简单的程序编写,让我们在Linux命令行下实现一个进度条小程序。具体效果如下图所示,感兴趣的话就耐心看完笔者的本篇文章吧!

请添加图片描述

程序的实现非常简单,不过在写程序前我们需要先了解几个概念:

首先初学者可以非常好奇,我们是如何实现改变同一行的信息使 # 不断变长的。这个地方就涉及到了本文的第一个知识点:回车和换行的概念。回车大家以及耳熟能详了,它就是我们键盘上的 Enter 键,在我们每次打字输出时,按一次 Enter 键我们就能换到下一行,并且光标的位置到达行首。所以这个动作我们可以看作两步——首先换至下一行,然后光标到此行的行首换至下一行的过程叫做换行,光标到此行的行首的动作叫做回车。所以我们键盘上的 Enter 键其实是换行 + 回车,只不过我们经常叫做回车。

而在我们C语言 printf 函数中有 ‘\r’ 这个字符,它所代表的意义就是回车当我们仅输出 \r 时我们的输出光标位置就会回到行首进行打印,而打印出来的内容则会替换本行之前的内容,这样我们就实现了改变同一行的内容进行输出。

大家对换行和回车有了一定的概念后,就有了下面一个概念:输出缓冲区的问题。
在这里插入图片描述
我们写了下面的代码,希望可以每一秒钟打印一次 hello ,我们运行一下试一试
请添加图片描述
此时我们发现运行结果与我们预期相差甚远,在程序结束时我们想要的 hello 才被打印出来,并且是三个一起出来的。这就涉及到输出缓冲区的概念了,我们实际输出的数据并没有第一时间打印到终端上而是先写入到输出缓冲区中。在程序结束时缓冲区的数据释放,所以产生了我们看到的结果。缓冲区的数据在遇到 \n 会自动刷新。但是我们要写的程序不想出现换行怎么办呢?我们也可以使用函数 fflush 进行刷新,在我们需要刷新的时候调用函数

	fflush(stdout);

了解了上面的两个概念我们写出进度条的程序就很容易了,我们可以创建一个字符数组存储 # 每次刷新的时候增加 # 的个数,程序代码如下请大家参考指正:

  1 #include <stdio.h>
  2 #include <unistd.h>
  3 
  4 char state[] = "/-\\-";
  5 
  6 int main()
  7 {
  8     char arr[102] = { 0 };
  9     int i = 0;
 10 
 11     while(i <= 100)
 12     {
 13         printf("[%-100s][%3d%%][%c]\r", arr, i, state[i%4]);
 14         arr[i] = '#';
 15         i++;
 16 
 17         usleep(10000);
 18         fflush(stdout);
 19     }
 20     printf("\n");
 21 
 22 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楼鱼睡觉的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值