C/C++练手小项目之倒计时与下载进度条模拟

Hellow! 你们好啊!,今天博主来介绍一个C语言练手的小项目--模拟倒计时和Linux中的下载进度条。代码不多就一百多行可以给刚入门的铁子练练手。

注:代码运行环境windows11,IDE大家各有所好,可以编译源代码就行。


目录

[1 前置知识点铺垫--printf的格式匹配符解析](#1 前置知识点铺垫--printf的格式匹配符解析)

[1.1 %d解析](#1.1 %d解析)

[1.2 %s解析](#1.2 %s解析)

[1.3 \r](#1.3 \r)

[2 控制printf打印字符的颜色](#2 控制printf打印字符的颜色)

[3 字符串自动拼接](#3 字符串自动拼接)

[4 %格式匹配符](#4 %格式匹配符)

[5 项目效果](#5 项目效果)

[6 实现代码及接口认识](#6 实现代码及接口认识)

[6.1 process.h文件](#6.1 process.h文件)

[6.2 process.c文件](#6.2 process.c文件)

[6.3 main.c文件](#6.3 main.c文件)


1 前置知识点铺垫--printf的格式匹配符解析

1.1 %d解析

%02d 输出整形宽度为2,默认右对齐,宽度不够补0。
%2d ,宽度不够补空格**,%-2d** 输出内容左对齐,后面补空格。

  • 控制内容的左右对齐方式,比如说输出两个字符宽度是对齐到右边还是左边。

1.2 %s解析

%100s输出的字符串长度不够100补空格,- 输出的字符串左对齐默认右对齐。

如**%-100s 从左边开始输出字符串长度不够100字符后面补空格。**

1.3 \r

\r 光标回到打印行开始的位置。从开始位置开始打印那么就会覆盖之前这一行打印的内容。

2 控制printf打印字符的颜色

颜色代码分类

‌通用属性‌:

0:重置所有属性

1:高亮/加粗

4:下划线

5:闪烁

7:反显(前景色与背景色互换)


前景色(字体颜色)‌:

30:黑色

31:红色

32:绿色

33:黄色

34:蓝色

35:品红色

36:青色

37:白色

// \033表示打印颜色, 1;5;表示设置颜色属性,31m表示字体颜色

#define RED "\033[1;5;31m"

#define GREEN "\033[32m"

#define Q "\033[0m"

#define RESET "\033[0m"

3 字符串自动拼接

在C语言中如果多个字符串写在同一个行会被自动拼接成一个字符串如

printf("ddd""aaa");--->printf("dddaaa");

const char* ptr="add""ddd";-->ptr="addddd";

4 %格式匹配符

这是C语言printf语句专门用来做格式占位的符号,如"sada%d",就是在这个字符串中给一个整形变量留了一个位置,将来这个整形变量会被当成字符放入到%d占的位置中,scanf中的%d叫做格式匹配符,从输入的字符串中按照整形的格式去匹配合适的字符。如果想打印%字符本身则需要%%转义一下才行,转义就是转变该字符意义。

5 项目效果

6 实现代码及接口认识

6.1 process.h文件

#pragma once

#include<stdio.h>

#include<string.h>

#define RED "\033[1;5;31m"

#define GREEN "\033[32m"

#define RESET "\033[0m"

#define GRENN "\033[32m"

//Total_file_size要下载的文件总大小

//cur_download_size 已经下载的文件大小

FlushDownlowd(double Total_file_size, double cur_download_size);

6.2 process.c文件

cpp 复制代码
#include"process.h"
//s1 构造缓冲区
const char* sym = "/|-\\";
int index = 0;
char buff[101];
FlushDownlowd(double Total_file_size, double cur_download_size)
{
	//初始化缓冲区--因为每次都要重新计算占比然后填入字符到缓冲区
	memset(buff,'\0',sizeof(buff));

	//计算下载占比
	double rate = (cur_download_size / Total_file_size) * 100.0;
	//转换为进度条
	int ct = (int)rate;
	//构造进度条
	for (int i = 0; i < ct; i++)
	{
		buff[i] = '#';
	}
	//打印进度条
	//%100s输出的字符串长度不够100补空格,- 输出的字符串左对齐默认右对齐
	//\r光标回到打印行开始的位置。从开始位置开始打印覆盖之前的内容
	printf(GREEN"[%-100s][%%%.1lf][%c]\r", buff, rate,sym[index++%4]);
	index=index % 4;
	//刷新缓冲区
	fflush(stdout);
	

}

6.3 main.c文件

cpp 复制代码
#include"process.h"
#include <windows.h>
#include<time.h>
void DownLoad(double Total_file_size,double speed)
{
	int sp1 = 0;
	//s1 记录下载总数
	double cur_download_size = 0;
	//s2刷新下载进度条
	while (cur_download_size<=Total_file_size)
	{
		//s2刷新下载进度条
		FlushDownlowd(Total_file_size, cur_download_size);
		//下载成功,刷新然后退出
		if (cur_download_size >= Total_file_size)break;
		Sleep(50);  // 休眠500毫秒
		//speed =rand()%10;//随机数模拟网络下载速度
		cur_download_size += speed;

	}
	printf("\n");

}
/*
颜色代码分类
‌通用属性‌:
0:重置所有属性
1:高亮/加粗
4:下划线
5:闪烁
7:反显(前景色与背景色互换)
‌前景色(字体颜色)‌:
30:黑色
31:红色
32:绿色
33:黄色
34:蓝色
35:品红色
36:青色
37:白色
*/
#define RED "\033[1;5;31m"
#define GREEN "\033[32m"
#define Q "\033[0m"
#define RESET "\033[0m"
int main()
{
	//printf("%20s","下载中:\n");
	//srand(time(0));
	////DownLoad(1024.0, 0.0);
	
	////DownLoad(1660.0, 0.5);
	int cnt = 3;
	printf("倒计时中:\n");
	while (cnt)
	{
		//%02d输出整形宽度为2,默认右对齐,宽度不够补0
		//%2d,宽度不够补空格,%-2d输出内容左对齐,后面补空格
		//- 控制内容的左右对齐方式,比如说输出两个字符宽度是对齐到右边还是左边
		printf(RED"%2d\r", cnt--);
		fflush(stdout);
		Sleep(1000);  // 休眠500毫秒
	}
	printf(RED"%2d\r", 0);
	printf("\n");
	printf(RED"倒计时结束,开始下载:\n");
	DownLoad(1500.0,2);
	return 0;
}

本期收录于博主的专栏------C/C++练手小项目专栏,代码里面都有注释有哪里不理解的小伙伴可以评论区留言。

感谢每一个观看本篇文章的朋友,更多精彩敬请期待:小董 不懂 *( ̄▽ ̄)°★*

相关推荐
这是程序猿12 分钟前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
芳草萋萋鹦鹉洲哦16 分钟前
【elemen/js】阻塞UI线程导致的开关卡顿如何优化
开发语言·javascript·ui
爱学习的小邓同学20 分钟前
C++ --- 多态
开发语言·c++
颜*鸣&空28 分钟前
QT实现串口通信+VSPD+串口调试工具
开发语言·qt
蓝牙先生1 小时前
简易TCP C/S通信
c语言·tcp/ip·算法
槁***耿1 小时前
JavaScript在Node.js中的事件发射器
开发语言·javascript·node.js
U***49831 小时前
JavaScript在Node.js中的Strapi
开发语言·javascript·node.js
@大迁世界1 小时前
相信我兄弟:Cloudflare Rust 的 .unwrap() 方法在 330 多个数据中心引发了恐慌
开发语言·后端·rust
大侠课堂1 小时前
C#经典面试题100道
开发语言·c#
X***E4631 小时前
PHP在电商中的订单处理
开发语言·php