简易动态进度条实现
来源:互联网 发布:csgom4a1皮肤知乎 编辑:程序博客网 时间:2024/05/29 17:04
在生活中我们随处可见进度条,下面我们来实现一个能够动态变化简易的进度条。
分析:在这里所谓的动态变换其实不是真的让它进行动态变换,而是利用人眼的视觉暂留现象,当进度条显示出来的时候看起来像是动态变换的。
如上图:
最开始用一个”=”表示进度是1%,当把这个进度的状态显示完毕之后,我们再回到这一行的开始位置输出两个”=”表示2%。原理就是这样,比较简单的,但是在这里面我们需要注意两个问题,首先是缓冲区问题,其次就是回车和换行的问题。
作为扩展的话我们有必要先来简单了解一下缓冲区:
1、为什么要引入缓冲区???
我们知道,在计算机中cpu的速度要远大于内存的速度,内存的速度要远大于磁盘的速度。为了提高cpu工作效率所以引入了缓冲区。缓冲区就是一块内存区,它在输入输出设备和cpu之间,用来缓存数据,使得低速的输入输出设备和告诉的cpu之间能够协调工作,避免低速的输入输出设备占用cpu,解放出cpu使其能够高效率工作。
2、缓冲区可以分为无缓冲、行缓冲、全缓冲三种形式。
无缓冲:
无缓冲就是不进行缓冲,标准错误流stderr就是典型的代表,这使得出错信息可以快速直接的显示出来。
行缓冲:
在这种情况下,当在输入和输出中遇到换行符时才执行真正的I/O操作。这时候我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是键盘的操作。
全缓冲:
在这种情况下,当写满标准I/O缓存后才进行实际的I/O操作。全缓冲的典型代表是对磁盘文件的读写。
4、刷新缓冲区:
在c语言中,提供了fflush()函数来刷新缓冲区,强制缓冲区内的数据进行标准I/O操作。
函数原型:int fflush(FILE *stream);其中文件流包括:stdin标准输入流,标准输出流stdout,标准错误流stderr流。
5、回车换行
回车用”\r”表示,换行用”\n”表示。回车表示回到这一行的起始位置,换行表示换到下一行。所以,在我们将一行写满之后跳到下一行的过程中,其实做了两件事,首先是回到当前行的起始位置,其次是换到下一行。
通过上面的了解之后,实现这个进度条的话我们应该选择无缓冲的方式,实时更新进度条的信息,其次在进度条中我们不需要换行,只需要回车即可。我们还可以在后面加上百分比和游标,游标就是标识进度条的工作状态。
代码实现:
#include<stdio.h>#include<unistd.h>void procBar(){ int rate=0; char bar[102]; bar[0]='\0'; const char* symbol="-/|\\"; while(rate<101) { printf("[%-100s] [%d%] %c\r",bar,rate,symbol[rate%4]); fflush(stdout); bar[rate]='='; rate++; bar[rate]='\0'; usleep(100000); } printf("\n");}#include"procBar.h"#include<stdio.h>int main(){ procBar(); return 0;}里写代码片
结果:
- 简易动态进度条实现
- 进度条的简易实现
- Linux - 实现简易进度条
- Canvas实现简易圆形进度条
- jquery 动态实现进度条
- css实现动态进度条
- CSS3实现动态进度条
- Linux下c实现简易进度条
- 在Linux下实现简易进度条
- Linux下简易进度条的实现
- Linux系统下简易进度条的实现
- LINUX-LINUX下简易彩色进度条实现
- jquery animate实现动态进度条
- 基于Ajax技术的简易进度条的实现
- 使用servlet实现简易上传文件(带进度条版本)
- 对简易弧形进度条的实现的理解
- 用Linux编写程序,实现一个简易的进度条
- linux环境下使用vim实现简易进度条代码
- 扩展已知类的功能
- Canvas
- 进程操作
- CentOS修改mysql 用户root的密码并允许远程登录
- 深入解读Spring Framework事务管理(第五弹:同时执行事务通知和自定义的分析通知)
- 简易动态进度条实现
- iOS开发怎么获取本地数据和把数据存储到本地
- 开始用FairyGUI和KBEngine重写uMMORPG
- PE导出表、重定位详解
- android获取json数据异常
- 【english】New Year message
- 【Hibernate】——使用连接表的单向关联映射
- cppcheck的简单介绍
- [实用代码片段] web分页之 智能10页