Linux第一个小程序——进度条

目录

一、回车和换行 

二、缓冲区

三、进度条实现思路:

四、进度条代码实现


一、回车和换行 

我们在实现进度条之前先来谈谈两个概念,回车换行,通常对于我们来说好像回车和换行是一样的,都是走到下一行的最左边,其实它们是不一样的。

回车(\r)是光标回到本行最左侧。

换行(\n)是换到一下一行,光标不一定在最左侧,

二、缓冲区

   #include<stdio.h>
   #include<unistd.h>
   int main()
   {                                                                                                 
      printf("hello world\n");         
      sleep(2);                        
                                       
    return;
   }

 对于上面的代码毫无疑问是会先打印hello world然后再sleep两秒。那么下面的代码呢?

   #include<stdio.h>
   int main()
   {                                                                                                 
      printf("hello world");         
      sleep(2);                        
                                       
    return;
   }

 对于这段代码呢?这段代码在Linux中,会先sleep两秒然后再打印hello world,我们知道C语言中代码是从主函数依次执行的,也就是说在sleep期间,printf一定执行完了,那么问题来了,在sleep期间hello world在哪里呢?它肯定在,因为我们最后会看到确实打印出来了,所以它一定被保存起来了,那么它被保存在哪里呢?它被保存在C语言提供的缓冲区里面,默认程序退出了缓冲区里的内容才会被刷新出来。上面那段代码是因为有\n,有\n就会刷新,因为显示器是行刷新

那么如果我们要强制刷新呢?需要用fflush(stdout),它可以将缓冲区里面的内容强制刷新出来。它的文件名是#include<unistd.h>,stdout是标准输出,也就是显示器。

   #include<stdio.h>
   #include<unistd.h>
   int main()
   {                                                                                                 
      printf("hello world");      
      fflush(stdout);   
      sleep(2);                        
                                       
    return;
   }

三、进度条实现思路:

我们要实现的进度条是从左往右走的,并且还要告诉我们当前的进度,最好还能有一个指针在转圈,所以我们可以用一个数组,第一次往数组里面放一个字符,然后打印,就打印出一个字符,然后继续往数组里面放字符,第二次打印从头开始打印,就相当于把上一次的第一个覆盖了,这样循环一百次,就可以打印出一个进度条。

四、进度条代码实现

#include<stdio.h>
#include<string.h>
#include<unistd.h>

#define  STYLE '='

 
   const char* lable = "|/-\\";
   
   void processbar()
  {
   char buff[102] ; 
    memset(buff,'\0',sizeof(buff));//全部初始化为0

 
    int len = strlen(lable);
    int cnt = 0;
    while(cnt <= 100)
   {
      printf("[%-100s][%d%%][%c]\r",buff,cnt,lable[cnt%len]);// /r光标回到最左侧
      fflush(stdout);  //C语言默认按行刷新,因此需要强制刷新。
      buff[cnt++] = STYLE;
      if(cnt < 100)
      buff[cnt] = '>';
       usleep(100000);//usleep是按微秒计算,
     }
     printf("\n");
  }
  
  int main()
  {
    processbar();                                                                                   
    return 0;
  }


我们先开一个数组,有101有效字符加上/0,所以我们大小开102,并且把它全部初始化为0,然后用一个循环,循环101次,每进去一次就打印一次数组,打印的时候要回车\r,让光标回到最左侧,不能\n,否则就不在一行上了,然后我们让cnt的位置填上字符,每一次数组里面的有效字符都会比上一次多一个,因此就会不断往后走,注意要打印百分号需要%%,转动的图标,可以用|/-\\,不断打印每一个字符就会有转动的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值