更新进度条C语言实现-阿里云开发者社区

开发者社区> 开发与运维> 正文

更新进度条C语言实现

简介: 受了李大神这篇文章的启发:http://blog.csdn.net/absurd/article/details/761943 于是我也自己亲手实现了一个简易版本的更新进度条,只要传入一个大于100的整型数即可。

受了李大神这篇文章的启发:http://blog.csdn.net/absurd/article/details/761943

于是我也自己亲手实现了一个简易版本的更新进度条,只要传入一个大于100的整型数即可。

#include <stdio.h>
#include <Windows.h>
#include <unistd.h>
//定义设置光标结构体变量  
CONSOLE_CURSOR_INFO cci;   
//定义默认的坐标位置       
COORD pos = {0,0};       
HANDLE hOut;    
/*
	10000
	/10000%1000
	/1000%100
	/100%10
	%10
*/
#define AEF  0x8
#define exp  1.39
#define TITLE "进度条"
typedef void (*work_ptr)(int * , int *);
void show_process(int *cnt , int *num)
{
	int flag = 1 ;
	int tmp = *num ;
	int tmp1 = *cnt ;
	int multiple = 0;
	static int _flag  ;
	static int count = 0 ;
	if(tmp1 >= 100) {
		multiple = (int)(tmp1/100*100/100);
		flag = 1 ;
	}
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | 0x8);
	pos.X = 73 ;
	pos.Y = 15 ;
	SetConsoleCursorPosition(hOut,pos);
	if(flag)
	{
		printf("%d%%",tmp/multiple);
		
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | 0x8);
		pos.X = 76 ;
		pos.Y = 15 ;
		SetConsoleCursorPosition(hOut,pos);
		switch(_flag)
		{
			case 0: printf("[%c]",'\\'); _flag = 1 ; break ;
			case 1: printf("[%c]",'/');  _flag = 0 ; break ;
		}
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | AEF);
		pos.X = (int)((tmp/multiple)/exp);
		pos.Y = 15 ;
		SetConsoleCursorPosition(hOut,pos);
		printf("=>") ;
	}
	return ; 
} 

void run_go(int cnt ,work_ptr ptr)
{
	int i ;
	int count = 0 ;
	cnt = cnt/100*100;
	if(cnt < 100) return ;
	for(i = 0 ; i < cnt ; i++)
	{
		count++ ;
		ptr(&cnt,&count);
		sleep(1);
		//usleep(1111000);
	}
}

int main(void)
{
	hOut = GetStdHandle(STD_OUTPUT_HANDLE); 
	GetConsoleCursorInfo(hOut, &cci); 
	SetConsoleTitleA(TITLE);  
	cci.bVisible =  0;    
	SetConsoleCursorInfo(hOut, &cci); 
	run_go(111,show_process);
	system("cls");
	run_go(132,show_process);
	system("cls");
	run_go(198,show_process);
	system("cls");
	run_go(325,show_process);
	system("cls");
	run_go(546,show_process);
	return 0 ;	
} 

运行结果:




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章