更新进度条C语言实现

受了李大神这篇文章的启发: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 ;
} 

运行结果:

时间: 2024-10-26 13:06:14

更新进度条C语言实现的相关文章

android用的handler更新进度条但是显示不出来并且进度条的高不能改总是那么高

问题描述 android用的handler更新进度条但是显示不出来并且进度条的高不能改总是那么高 xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layo

android AsyncTask异步下载并更新进度条

AsyncTask异步下载并更新进度条    //如果不是很明白请看上篇文章的异步下载 AsyncTask<String, Integer, String> 第一个参数:String 传入的是需要下载的地址 第二个参数:Integer 是进度条的进度 第三个参数:String 下载后的结果,如果您下载的是一张图片,可以将它改成BitMap 示例代码如下: package com.example.testcctv; import java.io.ByteArrayOutputStream; im

Handler实现线程之间的通信下载文件动态更新进度条

1. 原理 每一个线程对应一个消息队列MessageQueue,实现线程之间的通信,可通过Handler对象将数据装进Message中,再将消息加入消息队列,而后线程会依次处理消息队列中的消息. 2. Message 初始化:一般使用Message.obtain()方法获取一个消息对象,该方法会检查Message对象池中是否存在可重复利用的对象,若无,才会new一个新对象. what:相当于Message的标识符,区别于其它消息. arg1.arg2:int类型,可传递整数. obj:objec

Android UI(四)云通讯录项目之云端更新进度条实现

一.前言     继续AndroidUI系列,UI其实是个前端活,美感是最终的boss阶段.泥瓦匠的美感也就给你们评论评论哈哈,我等UI写到一定地步.我想写下Android的一系列简单入门.为了巩固提升呗.哈哈.下面介入正题.     有道是路漫漫其修远兮,吾将上下而求索.任何东西都不是一步登天,爱情啥都一样.钱也一样,没人愿意给你1亿,更何况也没愿意给你100的.为什么?没啥的,注意细节,一步一步来.让你值得那一亿就有了.但是要记住 "做人做事第一,技术第二" 二.正文     泥瓦

带进度条的ASP无组件断点续传下载

无组件|下载 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <%Option Explicit%> <% '================================== ''带进度条的ASP无组件断点续传下载 ''================================== '简介: '1)利用xmlhttp方式 '2)无组件 '3)异步方式获取,节省服务器资源 '4)服务器到服务器的文

j2me进度条与线程化模型

j2me进度条与线程化模型作者:FavoYang Email:favoyang@yahoo.com 欢迎交流 Keyworld:线程化模型 j2me UI设计 内容提要: 本文研究如何建立一个方便使用的线程化模型,这个线程化模型由前台的进度条UI 和后台的背景线程组成. 版权声明: 本文同时发表在www.j2medev.com和我的Blog(blog.csdn.net/alikeboy)上,如果需要转载,有三个途径:1)联系我并经我同意:2)和www.j2medev.com有转载文章合作协议的

再议j2me进度条与线程化模型

作者:FavoYang Email:favoyang@yahoo.com 欢迎交流Keywords:线程化模型 j2me UI设计 内容提要:本文是<j2me进度条与线程化模型>一文的续(以后简称原文,没看过的建议看一下).讨论了原文中使用的线程模型的不足,并针对她的缺点提出了新的改进办法并给出了改进后的实现.因原文中UI部分有灵活的扩展性,未作更改. 版权声明:本文同时发表在www.j2medev.com和我的Blog(blog.csdn.net/alikeboy)上,如果需要转载,有三个途

使用ASP.NET Atlas编写显示真实进度的ProgressBar(进度条)控件

asp.net|控件|显示  英文版见:http://dflying.dflying.net/1/archive/100_building_a_real_time_progressbar_using_aspnet_atlas.html 当后台在进行某些长时间的操作时,如果能在页面上提供一个显示真实进度的进度条,而不是让用户不知情的等待或是从前的那些简单的估计,将是一个非常难得的出彩之处.现在使用ASP.NET Atlas完全有可能做到这些.这篇文章将讨论如何完成这一功能并介绍一些有关Atlas客

ASP.NET实现进度条

asp.net 在网上查阅了很多相关资料,参照对比一番后自己整理了一下,做了个小例子.能够实现根据后台数据加载的进度在前台动态更新进度条.进度条在页面居中显示.在进度条内显示百分比,完成进度后隐藏进度条.个人感觉还是有一定的参考价值,贴出来先. 建立一个WEB工程,添加新项->HTML页面,命名为ProgressBar.htm,内容如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "