目录
1.回车与换行
2.缓冲区
强制刷新:fflush 策略
3.倒计时程序
4.进度条
4.1先做一下基本的准备工作
4.2现在我们正式来实现
进度:
比率:
旋转光标 表明动态变化:
4.3如果我们要完成一个下载任务
4.3.1实现:
4.3.2光标显示:
4.3.2.1证明一下,比率不变,但是光标还是在旋转
4.3.3网速是时快时慢的,进度条的更新进度也应该是时快时慢的
4.3.3.1我们可以定义一下网速的清单来做这个实验
4.3.3.2更完美:
1.回车与换行
回车:创建新的段落,文本内容会从新的一行开始 \r
换行:在同一段洛内进行换行,不创建新的段落 \n
2.缓冲区
带\n
\n 往显示器上写入 表示立即执行,数据立即显示
不带\n
从上向下执行
先执行printf再执行sleep
但是现象却是先sleep两秒再打印
所以我们sleep期间已经执行的printf字符串在哪里?
在缓冲区(我们当成一块内存空间)
缓冲区是给显示器提供的
有缓冲区就必然存在刷新策略:
显示器的刷新策略--> 行刷新 --> 如果打印的字符串包含\n,就会立即显示到显示器上,如果不包含,该字符串不做刷新,要么程序结束刷新,要么我们强制刷新
强制刷新:fflush 策略
在进行printf打印的时候,默认会打开文件的三个输入输出流
这样就可以立即刷新了
3.倒计时程序
\r 回到最开始
把数据显示,我们要刷新,因为我们不是\n,数字会在缓冲区一直不被更新,所有不会打印
我们就需要强制刷新
两位数的倒计时时,-2d 让倒计时到个位数时,有空格,同时空格在右边(因为不足两位时,默认是右对齐的)
4.进度条
4.1先做一下基本的准备工作
创建一个新的目录
创建三个文件,并写入内容
再把Makefile文件拷贝到当前路径
4.2现在我们正式来实现
进度:
比率:
旋转光标 表明动态变化:
4.3如果我们要完成一个下载任务
4.3.1实现:
4.3.2光标显示:
也有可能在下载但是进度不变(比率不更新),通过光标显示还在下载
定义了一个static变量,想让这个变量一直有效
index不能让他越界
4.3.2.1证明一下,比率不变,但是光标还是在旋转
这里改一下
ctrl+c 强制退出
4.3.3网速是时快时慢的,进度条的更新进度也应该是时快时慢的
4.3.3.1我们可以定义一下网速的清单来做这个实验
下多个文件也是可以的
4.3.3.2更完美:
定义了一个函数指针类型
实现下载的逻辑和进度条刷新逻辑通过函数指针结合
回调的方式进行进度刷新