当前位置: 首页 > news >正文

实现进度条

实现进度条

  • 进度条
  • 1 补充 - 回⻋与换⾏
  • 2 ⾏缓冲区
  • 3 练⼿ - 倒计时程序
  • 4 进度条代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

进度条

1 补充 - 回⻋与换⾏

• 回⻋概念
• 换⾏概念
• ⽼式打字机的例⼦
• \r&&\n

2 ⾏缓冲区

什么现象?
#include <stdio.h>
int main()
{
printf(“hello bite!\n”);
sleep(3);
return 0;
}

什么现象??
#include <stdio.h>
int main()
{
printf(“hello bite!”);
sleep(3);
return 0;
}

什么现象???

int main()
{
printf("hello bite!");
fflush(stdout);
sleep(3);
return 0;
}

3 练⼿ - 倒计时程序

#include <unistd.h>int main()
{
int i = 10;
while(i >= 0)
{
printf("%-2d\r", i); // \n
fflush(stdout);
i--;
sleep(1);
}
printf("\n");
return 0;
}

4 进度条代码

#include "process.h"
#include <string.h>
#include <unistd.h>
#define NUM 101
#define STYLE '='
// vesion1
void process_v1()
{
char buffer[NUM];
memset(buffer, 0, sizeof(buffer));
const char *lable="|/-\\";
int len = strlen(lable);
int cnt = 0;
while(cnt <= 100)
{
printf("[%-100s][%d%%][%c]\r", buffer, cnt, lable[cnt%len]);
fflush(stdout);
buffer[cnt]= STYLE;
cnt++;
usleep(50000);
}
printf("\n");}
// verison2
void FlushProcess(double total, double current)
{
char buffer[NUM];
memset(buffer, 0, sizeof(buffer));
const char *lable="|/-\\";
int len = strlen(lable);
static int cnt = 0;
// 不需要⾃⼰循环,填充#
int num = (int)(current*100/total); // 11.0 / 1000
int i = 0;
for(; i < num; i++)
{
buffer[i] = STYLE;
}
double rate = current/total;
cnt %= len;
printf("[%-100s][%.1f%%][%c]\r", buffer, rate*100, lable[cnt]);
cnt++;
fflush(stdout);
}process.h
#pragma once
#include <stdio.h>
void process_v1();
void FlushProcess(double total, double current);main.c
$ cat main.c
#include "process.h"
#include <stdio.h>
#include <unistd.h>double total = 1024.0;
double speed = 1.0;
void DownLoad()
{
double current = 0;
while(current <= total)
{
FlushProcess(total, current);
// 下载代码
usleep(3000); // 充当下载数据
current += speed;
}
printf("\ndownload %.2lfMB Done\n", current);
}
int main()
{
DownLoad();
DownLoad();
DownLoad();
DownLoad();
DownLoad();
DownLoad();
DownLoad();
DownLoad();
return 0;
}
SRC=$(wildcard *.c)
OBJ=$(SRC:.c=.o)
BIN=processbar
$(BIN):$(OBJ)
gcc -o $@ $^
%.o:%.c
gcc -c $<
.PHONY:
clean:
rm -f $(OBJ) $(BIN)
http://www.dtcms.com/a/340130.html

相关文章:

  • 【大模型早期融合的非标记化架构】
  • 学习strandsagents的http_request tool
  • 【上升跟庄买入】副图/选股指标,动态黄色线由下向上穿越绿色基准线时,发出买入信号
  • Ubuntu 20 各种网卡配置IP的方法
  • 【PyTorch】多对象分割项目
  • 别再手动处理字符串!Python 正则表达式实战手册(入门到精通)
  • 【深度学习新浪潮】Meta 开源最新视觉大模型 DINOv3,该模型有哪些技术亮点?
  • 【数据结构】使用队列解决二叉树问题
  • CentOS安装SNMPWalk
  • C++高频知识点(二十二)
  • 算法题Day3
  • 理解MCP:开发者的新利器
  • 从零开始理解一个复杂的 C++/CUDA 项目 Makefile
  • React学习(六)
  • 梅森公式计算传递函数及结构图转换为信号流图过程
  • STM32-FreeRTOS快速入门指南(中)
  • HJ3 明明的随机数
  • 数据结构——双链表
  • 人工智能细分方向全景图:从入门到专精的技术路径
  • AI出题人给出的Java后端面经(十⑨)(日更)
  • 零成本上线个人网站 | Cloudflare Pages 全流程实战指南
  • A股大盘数据-20250819 分析
  • redis基础----通用命令
  • 脑电分析——ICA原理、ICALabel成分与伪迹之间一对多的关系
  • 从合规到主动免疫:大模型内容风控的创新与实践
  • 【PyTorch】单对象分割项目
  • Seata笔记
  • Day22 顺序表与链表的实现及应用(含字典功能与操作对比)
  • 不同语言的并发模型对比:Go、Java与Python
  • Python脚本每天爬取微博热搜-终版