进度条(Linux)

简介: 进度条(Linux)

进度条


回车\r&&换行\n


回车,换行是两个不同的概念

回车表示光标回到所在行的行首;换行表示从光标所在行直接跳到下一行,相对位置不发生变化


行缓冲区概念


观察下面两段代码执行的结果


1 #include<stdio.h>
  2 #include<unistd.h>                                                                                                                                                        
  3 int main()
  4 {
  5   int i =10;
  6   while(i)
  7   {
  8     printf("剩余时间:%2d\r",i);
  9     i--;
 10     sleep(1);
 11   }
 12   return 0;
 13 }


070f83c32224e83ea7b2f2e2b7a63a52_569b4c37ca8843de8ff15e4d802b6e69.png


1 #include<stdio.h>
  2 #include<unistd.h>                                                                                                                                                        
  3 int main()
  4 {
  5   int i =10;
  6   while(i)
  7   {
  8     printf("剩余时间:%2d\n",i);
  9     i--;
 10     sleep(1);
 11   }
 12   return 0;
 13 }


50435f03788c3b22791de4b6a8b06009_4125f053494a41df92e97ec956ba6240.png


两段代码唯一的区别就是输出打印时第一个是回车打印,第二个时是换行打印结果却相差很大,原因便是:两种打印的缓冲区不同,第一个是打印到缓冲区,第二个是打印到行缓冲区,缓冲区的区别之后再进行学习,这里只作为了解


进度条代码


image.png


首先一个概念,凡是能显示到显示器上的都是字符

根据上面的学习,在进度条的打印中一定是使用回车打印,不过呢,上面的代码还是有些问题的。进度条肯定是在原地打印,总不能随着进度的加载,打印也冲页首打印到页尾。所以,在每次打印之后重新刷新输出,便可解决这个问题


代码分为四个文件:Makefile,源文件,头文件,进度条文件

头文件


1 #pragma once 
  2 #include<stdio.h>
  3 #include<string.h>
  4 #include<unistd.h>
  5 
  6 #define NUM1 5
  7 #define NUM2 100                                                                                                                                                          
  8 
  9 extern void Process();//函数声明


源文件


1 #include"Process.h"
  2 int main()
  3 {
  4   Process();                                                                                                                                                              
  5   return 0;
  6 }


Makefile


1 Process:test.c Process.c
  2   gcc test.c Process.c -o Process                                                                                                                                         
  3 .PHONY:clean
  4   rm -f Process


进度条文件


1 #include"Process.h"
  2 char style[NUM1]={'-','.','#','>','+'};
  3 void Process()
  4 {
  5   int i=0;
  6   char ch[NUM2];
  7   memset(ch,'\0',sizeof(ch));
  8   //加载符号
  9   const char*label="|\\_/";
 10 
 11   while(i<=100)
 12   {
 13     printf("[%-100s][%d%%][%c]\r",ch,i,label[i%4]);                                                                                                                       
 14     fflush(stdout);
 15     ch[i++]=style[2];
 16     //休眠50000毫秒
 17     usleep(50000);
 18 
 19   }
 20 
 21   printf("\n");
 22 }

a2bc81b82bc6ea46f321f65bb5f0080e_758429f84b8544a18707a02d142c14a9.png


目录
相关文章
|
2月前
|
缓存 小程序 Linux
【Linux】Linux第一个小程序-进度条
【Linux】Linux第一个小程序-进度条
|
5月前
|
移动开发 小程序 Linux
Linux | 手把手教你写一个进度条小程序-1
Linux | 手把手教你写一个进度条小程序
45 0
|
5月前
|
小程序 Linux 编译器
Linux | 手把手教你写一个进度条小程序-2
Linux | 手把手教你写一个进度条小程序
43 0
|
2月前
|
存储 缓存 小程序
『Linux升级路』进度条小程序
『Linux升级路』进度条小程序
|
5月前
|
小程序 Linux
3.4、Linux小程序:进度条
3.4、Linux小程序:进度条
24 0
|
5月前
|
小程序 Java Linux
Linux小程序之进度条
Linux小程序之进度条
64 0
Linux小程序之进度条
|
7月前
|
小程序 Linux C语言
【Linux】从0到1实现一个进度条小程序
【Linux】从0到1实现一个进度条小程序
|
7月前
|
存储 小程序 Linux
『Linux小程序』进度条
『Linux小程序』进度条
|
8月前
|
小程序 Linux C语言
【Linux】进度条小程序
【Linux】进度条小程序
|
10月前
|
存储 缓存 小程序
Linux小程序:倒计时和进度条
Linux小程序:倒计时和进度条