【Linux】小程序进度条
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
回车换行问题
日常中的换行
即
回车回到当前行的最开始
换行列不变新起一行
代码中的回车换行
我们先看一段代码
这个是带\n的
🌍结果是
先输出 hello 彦祖
换了行5秒之后才会显示命令行
🌍效果
🌏改变一下代码
把\n去掉
结果是
不换行5秒后显示hello 彦祖+命令行
🌏效果
那为什么会出现这种现象呢下面我们了解一下缓冲区
在这里我们要知道其实printf已经执行但是数据没有被立刻刷新到显示器中还在缓冲区中。
可以推出
没有\n 字符串会暂时保存起来
暂时保存的地方是用户C语言级别的缓冲区
显示器设备的刷新策略就是行刷新\n 即进行刷新
倒计时函数
我们可以看到它是换行打印出来的。
可是我们想到的原地打印啊那该怎么办呢?
怎么显示不出来呢
\r不是光标回到首位吗其实数据还在缓存区存着呢
我们刷新一下缓冲区就好了
但这时又又又出现问题了count>10以后个位一直不变了
其实解决这个问题很简单
进度条
前面讲那么多终于到进度条了。有人可能要问了那前面那些有什么用呢
其实进度条也是回车换行的问题大同小异我们一起来看看吧。
其实C语言也可以打印带颜色的字符大家可以去百度一下。
代码
1 #include<stdio.h>
2 #include<unistd.h>
3 #include<string.h>
4
5 #define NUM 102//要留出\0和最后小符号的位置
6 int main()
7 {
8 char arr[NUM];
9 //初始化arr数组
10 memset(arr,'\0',sizeof(arr));
11 const char* lab ="|/-\\";
12 int i = 0;
13 while(i<=100)
14 {
15 printf("[%-100s] [%d%%] [%c]\r",arr,i,lab[i%4]);
16 //符号可以换
17 fflush(stdout);
18 arr[i++]='#';
19 usleep(100000);//0.1s,usleep单位是微秒
20 }
21 printf("\n");
22 return 0;
23 }