简单进度条的实现
程序员文章站
2024-02-03 15:23:22
...
一、为什么调试的时候需要编译选项中添加 -g
加了-g选项时,是可以通过行号、函数名等进行断点的设置的
二、在Linux下实现进度条程序. 通过makefile进行编译.
1.普通进度条
(1)实现代码
#include<stdio.h>
#include<unistd.h>
# include<string.h>
int main()
{
int i=0;
char bar[102] = { 0 };
memset(bar,0,sizeof(bar));
const char*label = "-/\\|";
for (; i <= 100; ++i)
{
printf("[%-100s][%d%%][%c]\r", bar,i,label[i % 4]);
fflush(stdout);//刷新缓冲区
bar[i++]='#';
usleep(100000);//单位是毫秒
}
printf("\n");
return 0;
}
(2)最后效果
(3)makefile中的内容
2.彩色进度条
(1)实现代码
# include<stdio.h>
# include<unistd.h>
int main()
{
char buf[101] = { 0 };
const char*label = "-\\/|";//模拟转圈
size_t i = 0;
for (; i <= 100; ++i)
{
buf[i] = '#';
if (i <= 20)
printf("\e[32m[%lu%%]\e[0m\e[33m[%c]\e[0m\e[34m[%-50s]\e[0m\r", i * 2, label[i % 4], buf);
/* \e[32m[%lu%%]\e[0m:是i*2的格式,%lu是无符号长整型整数,%%:可以使得输出的整数带上% */
/* \e[33m[%c]\e[0m:是label[i%4]的格式 */
/* \e[34m[%-50s]\e[0m:是buf的格式,buf是一个字符串,-50是输出的总长度是50个空格,如果没有把此空格填写完,会在右边留出多> 余的空间 */
else
printf("\e[32m[%lu%%]\e[0m\e[33m[%c]\e[0m\e[35m[%-50s]\e[0m\r", i * 2, label[i % 4], buf);
// \r是回到行首
fflush(stdout);
usleep(100000);
}
printf("\n");
return 0;
}
(2)生成效果
(3)makefile中的编写情况