您的位置:首页 > 运维架构 > Linux

在Linux下用C语言实现简单的进度条

2017-04-09 15:20 337 查看
相信我们在平时使用电脑进行下载文件的同时都会看到一个进度条,提示我们文件下载的进度,所以呢我们来自己实现一个简单的进度条:

首先我们来看一个生活中的进度条:



通过观察我们选择用以下方式来实现一个简单进度条:

1.依次打印‘#’;

2.后面标注百分比;

代码如下:

#include<stdio.h>
#include<unistd.h>
int main()
{
int i = 0;
char bar[120];
const char *lable = "|/-\\";
while (i <= 100)
{
printf("[%-100s][%d%%][%c]\r", bar, i, lable[i % 4]);
fflush(stdout);
bar[i] = '#';
i++;
bar[i] = 0;
usleep(100000);
}
printf("\n");
return 0;
}


运行结果:





备注:

fflush:

功能:清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件。

fflush 的返回值类型是int类型。如果成功刷新,fflush返回0。指定的流没有缓冲区或者只读打开时也返回0值。返回EOF指出一个错误。

fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃[非标准];

fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上;

printf(“。。。。。。。。。。。”);后面加fflush(stdout);可提高打印效率。

彩色进度条

在上面进度条的基础上实现一个彩色进度条。

终端的字符颜色由转义序列控制,是文本模式下的系统显示功能,与具体语言无关。转义序列以控制字符’ESC’开头。多数转义序列超过两个字符,故通常以’ESC’和左括号’[‘开头。该起始序列称为控制序列引导符,通常由’\033[‘或’\e[‘代替。

printf("\033[0;37m%s\033[0m","hello world");


\033 是E的asc码,而这种是一个标记对,\033 是成对存在的.可以用e代替成\033

\033[ 后面的第一个参数是关闭所有文字的效果。

第二个参数是字体以及字体背景的颜色:

30-黑色,31-红色 ,32-绿色,33-黄色,34-蓝色,35-紫色,36-墨绿,37~39-白色

字体的背景色:

40-黑色,41-红色,42-绿色,43-黄色,44-蓝色,45-紫色,46-墨绿色,47-白色

第三个参数是字体的效果:

效果分为:1-高亮,4-下划线,5-闪烁,7-背景取反,2J—-清屏

最后一个m代表后面跟着要显示的字符串





模拟实现彩色进度条:

#include<stdio.h>
#include<unistd.h>
#define RED "\e[0;31m"
#define BLUE "\e[0;34m"
#define NONE "\e[0m"
#define GREEN "\e[0;32m"
#define YELLOW "\e[0;33;1m"
#define PURPLE "\e[0;35m"
#define GR "\e[0;36m"
main()
{
char bar[120];
const char* lab = "|\-/-";
int i = 0;
while(i<=100)
{
if(i%10==1)
{
printf(RED"[%-100s][%d][%c]\r"NONE,bar,i,lab[i%4]);
}
else if(i%10==2)
{
printf(YELLOW"[%-100s][%d][%c]\r"NONE,bar,i,lab[i%4]);
}
else if(i%10==3)
{
printf(BLUE"[%-100s][%d][%c]\r"NONE,bar,i,lab[i%4]);
}
else if(i%10==4)
{
printf(GREEN"[%-100s][%d][%c]\r"NONE,bar,i,lab[i%4]);
}
else if(i%10==5)
{
printf(PURPLE"[%-100s][%d][%c]\r"NONE,bar,i,lab[i%4]);

}
else
{
printf(GR"[%-100s][%d][%c]\r"NONE,bar,i,lab[i%4]);
}
fflush(stdout);
bar[i] = '#';
i++;
bar[i]=0;
usleep(100000);
}
printf("\n");
return 0;

}


效果如下:







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 进度条 c语言