进度条(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 }

在这里插入图片描述

 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 }

在这里插入图片描述

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

进度条代码

在这里插入图片描述

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

代码分为四个文件: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

进度条文件

扫描二维码关注公众号,回复: 15214862 查看本文章
  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 }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_68006585/article/details/129689161