进度条
基础知识
1 \r && \n
我们熟悉的
\n
实际上是两个操作 换行与回车
回车是将光标回到行开头
换行时将光标移到下一行
而“\r” 执行的是回车操作
我们可以看一下例子:
- 使用 “ \n ” 来看效果:
- 不使用“ \n ”
来看效果:
为什么会产生这样的区别???
原因就在缓冲区
2 行缓冲区
缓冲区是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。
“\n” 可以清空缓冲区 使内容出现在显示器是上
fflush()函数也可以完成类似功能。
3 函数介绍
- Sleep函数 Sleep函数可以使计算机程序(进程,任务或线程)进入休眠,使其在一段时间内处于非活动状态。
注意在VC中Sleep中的第一个英文字符为大写的"S"
在标准C中是sleep(S不要大写),下面使用大写的来说明,具体用什么看你用什么编译器。简单的说VC用Sleep,别的一律使用sleep。其中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000);另外还需要引用头文件 #include <windows.h> - usleep()函数 usleep功能把进程挂起一段时间, 单位是微秒(百万分之一秒)
注意需要引头文件 #include <unistd.h>个函数不能工作在windows 操作系统中。用在Linux的测试环境下面
进度条实现
版本 1
代码实现
progressbar.h
1 #include <stdio.h>2 #include<string.h>3 #include<unistd.h>45voidprogressbar();
progressbar.c
1 #include"progressbar.h"23 #define style '#'4 #define Length 10156voidprogressbar(){7char str[Length];8memset(str,'\0',sizeof(str));910int cnt =0;1112while(cnt<101){13printf("[%-100s][%3d%%]\r",str,cnt);14fflush(stdout);15 str[cnt++]= style;16usleep(20000);17}18printf("\n");1920}
main.c
1 #include"progressbar.h"23intmain(){4progressbar();5return0;6}
运行效果
版本2
显然 没有进度条会单独使用,一般都是搭配下载使用。
所以接下来我们来模拟一些下载过程:
progressbar.c
1 #include"progressbar.h"23 #define style '#'4 #define Length 10156voidprogressbar(double total,double current){7char str[Length];8memset(str,'\0',sizeof(str));910int cnt =0;11double rate =(current *100.0)/ total;12int loop =(int)rate;1314while(cnt <= loop){15 str[cnt++]= style;16}1718if(rate >=100){19printf("[%-100s][%0.1lf%%]\r",str,100.0);20}21else22printf("[%-100s][%0.1lf%%]\r",str,rate);2324fflush(stdout);2526}
main.c
1 #include"progressbar.h"23double bandwidth =1.0*1024*1024;45voiddownload(double total){67double current =0;8printf("Download Begin!\n");910while(current <= total){1112 current += bandwidth;13progressbar(total,current);14usleep(1000000);15}16printf("\ndownload done, filesize: %.1lf\n",total);17printf("\n");18}19intmain(){2021download(7.8*1024*1024);222324return0;25}
看看效果:
这下就非常类似我们的下载过程了!
Thanks♪(・ω・)ノ谢谢阅读!!!
下一篇文章见!!!
版权归原作者 叫我龙翔 所有, 如有侵权,请联系我们删除。