【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 }
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux