《C/C++实现Console下的加载进度条模拟[美观版]》
前言
有时候我们会遇到在CMD或DOS控制台上出现的加载进度条,虽然不是如网页和软件写的美观。但确确实实也有着自己的特色。而且,一个好看的加载进度条也能增加用户使用控制台程序的体验!所以,拿来研究一下也未尝不可!
博主,一开始写了个加载进度条的模拟。但是,效果不是很理想!于是,我默默地掏出了度娘....
What are you 搞啥勒?网上的答案几乎千篇一律,哎~有时候还能看见两篇一模一样的文章作者居然同时标注原创!而且,模拟的效果也不咋滴!
没办法,自己动手丰衣足食!还是得我自己来!
第一次尝试
这是博主第一次写的进度条,怎么讲呢!两个方块之间的空隙让人看了是真的不爽!
之前见那些控制台应用程序的加载进度条也不是这样的啊!为什么他们写的挺好看的?
中间这个方块怎么解决?
莫非不是某个字符输出的?这时,我不经意间发现了这个....
好像被选中的两个字符中间是连续的啊!难道那些应用就是通过选中了那块内容覆盖弄出的吗?好像不对!一来,这样实现似乎比较困难;二来,每次...总之还是比较困难o(////▽////)o....
不过....
第二次尝试
成了!!!真的可以,如果我们通过改变每个单位位宽的字体颜色和背景颜色一致,那不就实现连续的样式了吗?
所以,上代码!
#include <iostream>
#include <stdio.h>
#include <windows.h>
void gotoxy(int x, int y);
int main()
{
char a[4] = {'|','/','-','\\'}; //存储相关的字符
int i, j, x=2, y=1; //声明变量
std::cout << "*******加载进度条模拟*******" << std::endl; //输出顶框
putchar('\n'); //为接下来的进度条保留空位
std::cout << "******点赞***+***关注******" << std::endl; //输出底框
gotoxy(x,y); //调用函数控制光标位置
for (i = 0;i <= 100;i++) { //进度条总进度控制
std::cout << " ["; //进度条左边框
for (j = 0;j < i/10;j++) { //控制加载进度的显示
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | BACKGROUND_INTENSITY); //设置加载条样式配置
std::cout << "_";
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); //恢复原配置
for (j = 0;j < (10-(i/10));j++) { printf("%c", '.'); } //未加载进度显示
std::cout << "] "; //进度条右边框
std::cout << a[i%4] << "正在加载中"; //显示和程序进行中提示和“正在加载”字样提示
for (j = 0;j < (i%4);j++) { std::cout << "."; } //实现动态显示
for (j = 0;j < (4-i%4);j++) { printf("%c", ' '); }
Sleep(100); //控制程序运行速度
putchar('\r'); //回车
}
std::cout << "( ゜- ゜)つロBiliBili干杯~\n" << std::endl; //防覆盖
}
void gotoxy(int x, int y) //自定义 gotoxy 函数
{
COORD c;
c.X = x;c.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
总结
- gotoxy(int x,int y);函数的使用可以极大的增强我们在控制台输入和输出的灵活性;
- BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);函数的使用,使得控制台样式的多样性得以补充。
说明
本内容首发于BiliBili!为作者本人原创!
如有转载,请务必注明出处!
原文章地址:https:////www.cnblogs.com/seafever/p/12345200.html
《C/C++实现Console下的加载进度条模拟[美观版]》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- 【转】常见Java面试题 – 第二部分:equals与==
ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. Q2.下面的代码片段的输出是什么? Object s1 = new St ...
- cogs 1440. [NOIP2013]积木大赛 贪心水题
1440. [NOIP2013]积木大赛 ★★ 输入文件:BlockNOIP2013.in 输出文件:BlockNOIP2013.out 简单对比时间限制:1 s 内存限制:128 M ...
- KVM管理工具 WebVirtMgr
WEB管理工具 WebVirtMgr WebVirtMgr是一个基于libvirt的Web界面,用于管理虚拟机.它允许您创建和配置新域,并调整域的资源分配.VNC查看器为来宾域提供完整的图形控制台.K ...
- Java入门 - 高级教程 - 02.集合
原文地址:http://www.work100.net/training/java-collection.html 更多教程:光束云 - 免费课程 集合 序号 文内章节 视频 1 概述 2 集合接口 ...
- 痞子衡嵌入式:ARM Cortex-M内核那些事(3.2)- 安全模块看特性(M23/33/35P)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M功能模块,不过侧重点是三款安全特性处理器. ARM Cortex-M处理器家族发展至今(2020),已有8代产品 ...
- NOI2.5 1817:城堡问题
描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # ...
- JS-03-数据基本类型与转换
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 在windows中python安装sit-packages路径位置 在Pycharm中导入opencv不能自动代码补全问题
在Pycharm中导入opencv不能自动代码补全问题 近期学习到计算机视觉库的相关知识,经过几个小时的探讨,终于解决了opencv不能自动补全代码的困惑, 我们使用pycharm安装配置可能会添加多 ...
- Web自动化测试项目(六)多环境执行
需求 使用命令行运行脚本,可以指定测试/预发布/生产环境的url,如果找不到该环境变量则默认为测试环境 python3 xxxxxx.py test 修改constants.py # DOMAIN = ...
- Intent传递实现Parcelable接口的对象
Intent可以传递基本数据类型,在对象实现了Parcelable接口后,Intent也可以传递对象. 1. 使类ListVideo实现了Parcelable接口. package com.examp ...