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

进度条文件

  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 }

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值