第一种,用printf模拟输出百分比,在控制台输出,实现进度监控。
代码:
#include<stdio.h>#define N 20
void mBar(float fBar){
int i,j,k,m
for ( i=0i<N+6i++ ) printf("\b")
k=N*fBar m=fBar*100 printf("[")
for ( i=0i<ki++ ) printf("=")
for ( j=0j<N-kj++ ) printf(" ")
printf("]%3d%%",m)
}
void delay(int n) { int i,j,k for ( i=0i<ni++ ) for ( j=0j<0x07fffj++ ) k++ }
void main()
{
float x
int i
for ( i=0,x=0i<100i++,x+=0.01 ) { mBar(x) delay(1024) }
mBar(1)
}
第二种,使用窗口组件。这个要看程序工作环境,纯粹的c语言是无法实现的。可以使VC++。Visual C++中的MFC类提供了标准的进度指示器控件(CProgressCtrl)。
m_progress->GetPos()//获取进度条的当前位置
m_progress->GetRange(int min,int max)//获取进度条控件的范围的下限和上限
m_progress->OffsetPos(int nPos)//用指定的增量推进进度条控件的当前位置,重绘进度条反映新位置
m_progress->SetBkColor(COLORREF clrNew)//设定进度条的背景颜色
m_progress->SerPos(int nPos)//设定进度条控件的当前位置,重绘进度条反映新位置
m_progress->SetRange(int min,int max)//设定进度条控件的范围的下限和上限
m_progress->SetRange32(int min,int max)//设定进度条控件的范围的下限和上限
m_progress->SetStep(int nStep)//指定进度条控件的步进增量
m_progress->StepIt()//通过步进增量,推进进度条控件的当前位置,重绘进度条反映新位置
应用:
CProgressCtrl *m_progress//头文件中声明
在OnInitDialog初始化
{
m_progress = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1)
m_progress->SetRange(0,1000)
m_progress->SetPos(0)
UINT m_timer =(UINT) SetTimer(1,200,NULL)
}
采用在定时器的消息处理函数WM_TIMER内添加不断更新进度条界面的方法
OnTimer (nIDEvent)
{
pos = pos + 50
if(pos>500)
pos = 0
m_Progress->SetPos(pos)
}
或者采用在某种循环体内添加不断更新进展条界面的方法
<p>您好,sa团队给出的答案</p> <p>(由于本人不用做百分比进度条,所以从网上找了一个,不知道对不对,仅供参考)</p> <p>#!/bin/sh<br>off (){<br>echo -e "\e[?25l"<br>}<br>on (){<br>echo -e "\e[?25h"<br>}<br>gotoxy (){<br>echo -ne "\e[$1$2h"<br>}<br>character (){<br>gotoxy 0 0<br>echo "["<br>gotoxy 0 44<br>echo "]"<br>n=2<br>num=0<br>while [ $n != 44 ]<br>do<br>sleep 0.07<br>gotoxy 0 $n<br>echo -en "\e[144m \e[0m"<br>gotoxy 0 45<br>echo -n "$num%"<br>num=$(echo "$n * 2.3 + 1" | bc )<br>(( n++ ))<br>done<br>gotoxy 0 45<br>echo -n "100.0%"<br>}<br>clear<br>off<br>character <br>on</p> <p></p> <p></p> <p>这里有一个网址,提供给您(cfm补丁0.2版,增加了进度条,百分比等内容的显示 </p> <p>): <a href="https://wenwen.sogou.com/login/redirect?url=http%3a%2f%2fclub.noahedu.com%2fthread-116262-1-1.html" target="_blank">http://club.noahedu.com/thread-116262-1-1.html</a></p>这里有个现成的!拿去改改就行了!!#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <windows.h>
#include <winbase.h>
typedef struct node{ /* 定义链表 */
char name[20]/* 姓名 */
char address[40]/* 地址 */
char phone[15]/* 电话 */
long zip/* 邮编 */
struct node *next
}add_list
struct person{ /* 定义一个结构备用 */
char name[20]
char address[50]
char phone[15]
long zip
}
FILE *fp
add_list *tail,*head/* 定义链表尾节点指针和头指针 */
/* 从文件中读出数据生成通讯录链表,如果文件不存在,生成空链表 */
add_list *load(char filename[])
{ add_list *new1,*head
struct person t
head=(add_list *)malloc(sizeof(add_list))
tail=head=NULL
if((fp=fopen(filename,"rb"))==NULL)
return head
else
if(!feof(fp))
if(fread(&t,sizeof(struct person),1,fp)==1)
{ new1=(add_list *)malloc(sizeof(add_list))/* 连入链表第一个节点 */
strcpy(new1->name,t.name)
strcpy(new1->address,t.address)
strcpy(new1->phone,t.phone)
new1->zip=t.zip
head=tail=new1
new1->next=NULL
while(!feof(fp)) /* 连入链表其余节点 */
{ if(fread(&t,sizeof(struct person),1,fp)==1)
{ new1=(add_list *)malloc(sizeof(add_list))
strcpy(new1->name,t.name)
strcpy(new1->address,t.address)
strcpy(new1->phone,t.phone)
new1->zip=t.zip
tail->next=new1
new1->next=NULL
tail=new1
}
}
}
fclose(fp)
return head
}
/* 自定义函数,进度条 */
void jindutiao(void)
{ int i
for(i=0i<78i++) putchar('.')
printf("\r\a")
for(i=0i<78i++)
{
if(i==0) putchar('|')
Sleep(100)
printf("\b|>")
}
}
/* 插入一条通讯录记录 */
void insert(add_list **head)
{ add_list * new1
new1=(add_list *)malloc(sizeof(add_list))
system("cls")
printf("\n请输入姓名:")getchar()gets(new1->name)
printf("\n请输入地址:")scanf("%s",new1->address)
printf("\n请输入电话:")scanf("%s",new1->phone)
printf("\n请输入邮编:")scanf("%ld",&new1->zip)
if(*head==NULL) /* 表头为空时 */
{ *head=new1
new1->next=NULL
tail=new1
}
else /* 插入到表尾 */
{ tail->next=new1
new1->next=NULL
tail=new1
}
printf("输入完成,按回车键返回......")
getchar()
getchar()
}
/* 将通讯录链表中的内容保存到指定文件中 */
void save(add_list *head,char filename[])
{ add_list *p
struct person t
if((fp=fopen(filename,"wb"))==NULL)
{ printf("错误:不能打开文件%s\n",filename)
exit(1)
}
else
{ p=head
while(p!=NULL)
{ strcpy(t.name,p->name)
strcpy(t.address,p->address)
strcpy(t.phone,p->phone)
t.zip=p->zip
fwrite(&t,sizeof(struct person),1,fp)
p=p->next
}
}
fclose(fp)
printf("保存成功,按回车键返回......")
getchar()getchar()
}
/* 显示通讯录内容 */
void display(add_list *head)
{ add_list *p
p=head
if(p!=NULL)
printf("姓名:\t\t住址:\t\t邮编:\t\t电话:\n")
while(p!=NULL)
{
printf("%s\t\t%s\t\t%ld\t\t%s\n",p->name,p->address,p->zip,p->phone)
p=p->next
}
printf("按回车键返回......")
getchar()getchar()
}
/* 按姓名查询通讯录记录 */
int search(add_list *head)
{ add_list *p
char name[20]
int flag=0
printf("请输入要查找的人的姓名:")
getchar()
gets(name)
p=head
while(p!=NULL)
{ if(strcmp(name,p->name)==0)
{ printf("姓名:\t\t住址:\t\t邮编:\t\t电话:\n")
printf("%s\t\t%s\t\t%ld\t\t%s\n",p->name,p->address,p->zip,p->phone)
flag=1
}
p=p->next
}
return flag
}
/* 按姓名删除一条通讯录记录 */
int delete1(add_list **head)
{ add_list *p,*q,*t
char name[20],c
int flag=0
printf("请输入要删除人的姓名:")
scanf("%s",name)
q=p=*head
while(p!=NULL)
{ if(strcmp(name,p->name)==0) /* 找到要删除的人 */
{ printf("姓名:\t\t住址:\t\t邮编:\t\t电话:\n")
printf("%s\t\t%s\t\t%ld\t\t%s\n",p->name,p->address,p->zip,p->phone)
printf("真的要删除吗?(Y:是,N:否)\n")/* 征求意见(删&不删) */
getchar()c=getchar()
if(c=='y'||c=='Y') /* 删除 */
{ if(p==*head)
*head=p->next
else
q->next=p->next
t=p
p=p->next
free(t)
flag=1
}
else /* 不删,跳过 */
{ q=p
p=p->next
flag=1
}
}
else /* 没找到,继续 */
{ q=p
p=p->next
}
}
return flag
printf("按回车键返回......")
getchar()
}
/* 显示菜单并选择菜单项 */
int menu_select()
{ char c
system("cls")
printf("\t\t********************通讯录********************\n")
printf("\t\t\t 1:输入新的通讯记录\n")
printf("\t\t\t\t 2:删除记录\n")
printf("\t\t\t\t 3:查找\n")
printf("\t\t\t\t 4:保存文件\n")
printf("\t\t\t 5:浏览所有通讯记录\n")
printf("\t\t\t\t 6:退出\n")
do{
printf("请输入你的选择(1~~6):")
c=getchar()
}while(c<'1'||c>'6')
return c
}
/* 主函数 */
int main(void)
{ char filename[20]
char c
int t
printf("\n\n\n\n\n\n\t\t\t\t通讯录启动中...\n\n\n\n\n\n\n\n\n\n\n\n\n")
jindutiao()
system("cls")
printf("请输入通讯录文件名称:\n")
scanf("%s",filename)
getchar()
head=load(filename)
while(1)
{ c=menu_select()
switch(c)
{ case '1': insert(&head)break
case '2': t=delete1(&head)
if(!t) printf("记错了吧,没这人!\n按回车键返回......")getchar()getchar()break
case '3': t=search(head)
if(!t) printf("天啊!居然没找到!\n按回车键返回......")getchar()break
case '4': save(head,filename)break
case '5': display(head)break
case '6': exit(0)
}
}
}