一提起进度条,大家会想到在进行安转软件或下载视频等时,会出现以下几点

1、进度条存在一个区间,不断加载数据,直到区间加载满了。

2、发现会显示你的进度,从0%~100%。

3、在网速不好的时候,会出现一个旋转的小圈,表示在进行加载数据。

思路:

      我们通过一个数组,每加载成功一次,数组会多出现一个标示。由于进度条是在一行内进行的,故我们需要回车,不需要换行,通过“\r”实现。

1、进度条由0%~100%,在字符数组中,输出一串字符时,最后以“\0”结束的,故需要一个大小为102的数组,加载成功的数据用“#”表示。

2、进度条会出现一个区间,然后在里面进行加载,故先用“【”和“】”表示加载的区间。

3、定义一个rate标识进度,每进行一次加一,直到100时停止。

4、在进行回车前,需要进行刷新。

5、在加载进度时,通过sleep()或usleep()控制睡眠时间,sleep表示秒,usleep表示微秒。

6、对于加载中旋转的小圈通过“/-|\”逆时针进行。

下面实现进度条

wKioL1dQ7hHzGbjeAABvZmygNCE884.png-wh_50

在打印buf时,每次在中间预留100个位置,由于在进行打印buf时,会从后向前打印,故用-100.

在rate为0时,不进行加载‘#’,故从buf+1开始输出。

通过make进行编译链接,结果如下所示

wKioL1dQ723Ck9WRAAAMuNjKndA615.png-wh_50

wKiom1dQ7Z6Aui-zAAAT5X5SURc153.png-wh_50

有关make和makefile可查看本人上一篇博客:http://10741357.blog.51cto.com/10731357/1785098

● 通过两个程序对回车、换行以及缓冲区进行分析。

wKiom1dQ8gzzpnMsAAA7ZoFnWWo434.png-wh_50

      上述两个程序运行结果一样吗?两个都会打印出“hello world”,但是左边程序会先休息1秒再打印,右边程序先打印后休息1秒。为什么?由于在c语言中是行缓冲,程序存放在缓冲区中,遇到'\n'进行刷新,没有'\n'一直进行后面操作,程序被强制结束会进行刷新。回车换行是一行到新一行的打印。