首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Linux系统】第六节—简易倒计时+进度条(详解)

【Linux系统】第六节—简易倒计时+进度条(详解)

作者头像
云边有个稻草人
发布2025-06-02 13:06:35
发布2025-06-02 13:06:35
10200
代码可运行
举报
运行总次数:0
代码可运行

本节课知识点画板

前奏知识点

1、回车和换行
  • 回⻋概念
  • 换⾏概念
  • ⽼式打字机的例⼦
  • \r&&\n
2、⾏缓冲区

什么现象?

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
int main()
{
    printf("hello bite!\n");
    sleep(3);
    return 0;
}

什么现象??

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
int main()
{
    printf("hello bite!");
    sleep(3);
    return 0;
}

什么现象???

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
int main()
{
    printf("hello bite!");
    fflush(stdout);
    sleep(3);
    return 0;
}

五、练手—倒计时小程序

代码语言:javascript
代码运行次数:0
运行
复制
#include<stdio.h>
#include<unistd.h>

int main()
{
    int cnt = 10;

    while(cnt >= 0)
    {
        printf("%-2d\r",cnt);
        fflush(stdout);
        sleep(1);
        cnt--;
    }

    printf("\n");

    return 0;
}

六、进度条

process.h
代码语言:javascript
代码运行次数:0
运行
复制
#pragma once
#include<stdio.h>

void FlushProcess(); 
process.c
代码语言:javascript
代码运行次数:0
运行
复制
define SIZE 101
  #define STYLE '#'
  
  //v2:根据进度,动态刷新进度条
  void FlushProcess(double total,double current)
  {
      const char* lable = "|/-\\";
      int len = strlen(lable);
      static index = 0;
      char buffer[SIZE];
      memset(buffer,0,sizeof(buffer));
  
      double rate = current*100/total;
      int num = (int)rate;
  
      int i = 0;
      for(;i < num;i++)
      {
          buffer[i] = STYLE;
      }
      printf("[%-100s][%.1lf%%][%c]\r",buffer,rate,lable[index++]);
      fflush(stdout);
      index %= len;
  
      if(num >= 100)
      {
          printf("\n");
      }
  
  }

//v1:展示进度条的基本功能
  void process()
  {
      int rate = 0;
      char buffer[SIZE];
      memset(buffer,0 , sizeof(buffer));
      const char* lable="|/-\\";
      int len = strlen(lable);
  
      while(rate <= 100)
      {
          printf("[%-100s][%d%%][%c]\r",buffer,rate,lable[rate%len]);
          fflush(stdout);
          buffer[rate] = STYLE; 
          rate++;
          usleep(50000);
      }
  
      printf("\n");
  }
main.c
代码语言:javascript
代码运行次数:0
运行
复制
#include"process.h"
  #include<stdlib.h>
  #include<time.h>
      
  double total = 1024.0;    
  double speed[] = {1.0,0.5,0.2,0.1,0.01,0.02};    
      
  void download()    
  {    
      double current = 0.0;    
      srand(time(NULL));    
      
      while(current <= total)    
      {    
         FlushProcess(total,current);    
      
          if(current == total)    
              break;    
      
          //下载代码    
          int random = rand()%6;    
          usleep(5000);    
          current += speed[random];    
          if(current >= total)    
          {    
              current = total;    
           }    
      
      
      }    
      
  }                                                                                                                                                                              
      
  int main()    
  {    
      download();    
      
      return 0;  
  }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【本节课知识点画板】
  • 前奏知识点
    • 1、回车和换行
    • 2、⾏缓冲区
  • 五、练手—倒计时小程序
  • 六、进度条
    • process.h
    • process.c
    • main.c
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档