赞
踩
回车(\r):让光标回到当前行的最左端
换行(\n):让光标回到下一行的最左端,同时刷新缓冲区
makefile文件的建立以及使用:
#pragma once
#include<stdio.h>
#define NUM 102
#define TOP 100
#define BODY '='
#define RIGHT '>'
extern void processbar(int speed);
#include"processbar.h" #include<string.h> #include<unistd.h> const char *lable="|/-\\"; void processbar(int speed){ char bar [NUM]; memset(bar,'\0',sizeof(bar)); int len=strlen(lable); int cnt=0; while(cnt<=TOP){ printf("[%-100s][%d%%][%c]\r",bar,cnt,lable[cnt%len]); //打印的时候在【】内预留100个位置,并且左靠齐打印 //lable【cnt%len】模拟下载的动态效果 //并且打印完一次后让光标对齐到最左侧,为下一次覆盖打印做铺垫 fflush(stdout); bar[cnt++]=BODY; if(cnt<100){ bar[cnt]=RIGHT; } usleep(speed); //进行休眠 } printf("\n"); }
#include"processbar.h"
#include<unistd.h>
int main(){
processbar(10000);
return 0;
}
#include<stdio.h>
#define NUM 102
#define TOP 100
#define BODY '='
#define RIGHT '>'
extern void processbar(int rate);
extern void init();
#include"processbar.h" #include<string.h> #include<unistd.h> const char *lable="|/-\\"; char bar[NUM]; void processbar(int rate){ if(rate<0||rate>100){ return ; } int len=strlen(lable); printf("[%-100s][%d%%][%c]\r",bar,rate,lable[rate%len]); fflush(stdout); bar[rate++]=BODY; if(rate<100){ bar[rate]=RIGHT; } } void init(){ //重新初始化,清空数组内容 memset(bar,'\0',sizeof(bar)); }
#include"processbar.h" #include<unistd.h> typedef void (*callback_t)(int); //类型为void (* )(int)的函数指针 void DownLoad(callback_t cb){ int total=1000; int cur=0; while(cur<=total){ usleep(50000); int rate=cur*100/total; //算出比例 cb(rate); //每次cur增加都调用一次cb函数 //也就是processbar函数 cur+=10; } printf("\n"); } int main(){ DownLoad(processbar); init(); DownLoad(processbar); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。