进度条的应用在软件中无处不在,拷贝一个文件需要一个进度条,加载一个文件也需要一个进度条,来标志完成与否。
那么 ,一个进度条有哪些元素呢:
-
一个不断向右生长的容器(直观的看出当前的进度)
-
一个数据化反映进度的百分比。
-
一个标志(这个标志反映这个进度条是否在工作,还是卡死
首先我们需要将[ ]固定在左右两边,中间预留下空间,然后用“=”进行填充。这里printf("[%-101s]\r",str); 格式化输出,‘-’表示左对齐,100表示固定列宽,然后‘\r’ 表示回车,即每次打印完使光标回到最开始位置。
再明确一下,‘\n’和‘\r’这两个概念:‘\n’表示换行,换到当前行的下一行,即光标指向下一行最开始的位置;'\r'指回车,即光标回到最开始位置。
如果不加睡眠时间,结果一下就全打印出来了,但我们想让它稍微慢一点,毕竟是进度条嘛,而Linux系统下默认sleep时间单位为秒(s),这样的话又觉得间隔时间太长了,于是就有了usleep,它是以微妙计的。
C语言的printf是行缓冲输出,什么意思呢?就是说不满一行不输出,就是靠\n输出的,没有\n只好强制把缓冲中的数据输出出所以这就 要用到函数fflush()。
程序源代码:
效果图:
源码:
#include "stdio.h"
#include "string.h"
#include "windows.h"
void proc(){
int i = 0;
char buf[102];
memset(buf, '\0', sizeof(buf));
const char *lable = "|/-\\";
while (i<=100){
printf("[%-101s][%d%%][%c]\r", buf,i,lable[i%4]);
fflush(stdout);
buf[i]='=';
i++;
Sleep(50);
}
printf("\n");
}
int main(){
proc();
return 0;
}
点击链接加入群聊【C语言/C++编程学习基】:
小鱼快来啊的个人空间_哔哩哔哩_Bilibili小鱼快来啊,编程学习群:724050348 每天分享一个编程小游戏~C/C++游戏源码素材及各种安装包, 私信不常看!;小鱼快来啊的主页、动态、视频、专栏、频道、收藏、订阅等。哔哩哔哩Bilibili,你感兴趣的视频都在B站。https://space.bilibili.com/1827181878?spm_id_from=333.1007.0.0