注意点:
- 缓冲区中的内容被保存起来刷新不出来在Windows看不出来,只有在Linux系统下可以看出来!
- extren关键字声明函数的时候可带可不带,因为在头文件进行一定是进行函数的声明,但是变量的声明一定要带上extern!
进度条的思路:
从左到右,第一次显示1个字符,第二次显示2个字符,第三次显示3个字符.......
每次显示多一个字符,且将前面的字符给覆盖掉!
注意点:
- 使用usleep函数(头文件依然为#include<unistd.h>)
休眠时间为微秒! 1s = 1000毫秒 = 1000*1000微秒!
- 右括号不动,左边最终#移动至右括号:空字符不占位置,有效输出的#一共有100个 --- >>> [%-100s]
- 此时我们还想输入百分比%:在[%-100s]右边加上[%d] --- cnt即可 --- 但是此时只显示数字,没有对应的百分比!
- 用两个%来显示百分号![%d%%];或者\%(转义字符)也可以打印%,但是不推荐
如何实现一个加载符号(旋转光标)?
方法(原理):第一次输出一个 | ,第二次覆盖式的写入一个 / ,第三次覆盖式的写入 — ,第四次再覆盖式的写入 \ ,然后再写入 — !
注意点:\(反斜杠是一个特殊的字符),因此通过\\解除注释表示一个\\!
如果我们想写成最后一个符号是>的形式,可以参考下列代码:
15 while(cnt <= 100)
16 {
17 printf("[%-100s][%d%%][%c]\r",bar,cnt,lable[cnt % len]); // 没有\n,就没有立即刷新,因为显示器模式是行刷新
18 fflush(stdout);
19 bar[cnt++] = Str_style;
20 bar[cnt] = '>'; // 在这次循环中,前cnt行打印的是Str_style,然后cnt+1,在cnt+1行打印'>'
E> 21 usleep(100000);
22 }
但是该代码有个问题:我们一共定义102个字符(循环从0~100执行了101次,显示101个数字,\0为第102个)
当cnt = 100时,此时循环内在cnt = 101的位置上将其改为'>',但是101上面应该放\0,因为我们应该加上条件判断!
如果我们不希望程序结束后,#留在最后:将cnt = 100的情况删去!
此时进度条进度已经差不多了,我们可以将程序优化一下:将数字改成宏,函数自定义传入参数等
最后显示进度条代码对应的源文件和头文件:
头文件:processBar.h
#pragma once
#include<stdio.h>
#define Str_style '=' // 将字符定义为#
#define NUM 102 // 循环共101次,再加上\n一共102
#define BODY '='
#define RIGHT '>'
#define TOP 100 // 循环次数
extern void processbar(int rate);
源文件:processBar.c
#include<stdio.h>
#include"processBar.h"
#include<string.h>
const char *lable = "|/-\\";
// v2版本:进度条如何被调用的?
char bar[NUM];
void processbar(int rate)
{
if(rate < 0 || rate