肃宁哪里建网站,手机网站开发教程视频,做网站要先做商标吗,wordpress多平台自动提交本文中#xff0c;我们来写一个进度条。
本文大纲#xff1a;
写一个命令行版的进度条。
1.回车换行
2.缓冲区问题#xff08;本文不深究#xff09;
2.1测试代码
3.写一个什么样的进度条#xff1f;
version1
version2
回车换行
这俩不是一个概念我们来写一个进度条。
本文大纲
写一个命令行版的进度条。
1.回车换行
2.缓冲区问题本文不深究
2.1测试代码
3.写一个什么样的进度条
version1
version2
回车换行
这俩不是一个概念 在计算机语言中换行是\n回车是\r。\n\r是回车换行。 如果改成这样 我们就会发现等待3秒后才会打印出来。
那么先执行的是printf还是sleep呢
我们的程序永远都是从前往后执行的。
为什么printf执行完了显示器没有显示在我们休眠的时间里我们的字符串在哪
在缓存区里。
那为什么有’\n’就能先打印出来呢
因为行刷新。
而我们没有’\n’是因为程序结束了会自动刷新缓冲区。
如果我们想让不带’\n’的自动刷新呢
fflush
我们的程序会自动打开这三个流。 stdin是键盘。stdout和stderr是显示器。
我们知道linux下一切皆文件printf是往stdout里写入。 所以我们也可以加一个参数然后写成fprintf版本 使用fflush 测试代码 如果我们想在同一个位置打印呢那就不能让它换行了。
光标的位置永远是输入下一个字符的位置。
所以我们这样修改 这里如果我们把i定义为10就会发现
倒计时到1的时候显示的是 理解显示 当我们在屏幕上打印12345时打印的是整数12345还是字符’1’‘2’‘3’‘4’5’呢
答案是后者。
**显示器只认字符**所以我们说显示器是字符设备。
这也是为什么平时printf时要格式化输出。
比如我们int a;printf内部把我们的a由整数转成字符串然后再由类似putc这样的接口把字符一个个显示出来。
我们这样修改 怎么理解这个%2d呢
这代表位宽为2一次显示两个字符如果只有一个字符会把后面的字符清理掉可以理解为显示的是02或者空格2. 我们还可以改成让数字靠屏幕左侧显示 这样修改表示左对齐。
写一个什么样的进度条 左侧的这个中括号里面随着右侧中括号里的百分比增加井号增加但不会讲右侧中括号向后挤同时最右侧的中括号中/进行旋转。
原理版本version1 用sleep会太慢了所以我们改用usleep 微秒
1s100w微秒
我们可以先写出井号部分的中括号 然后再写出百分比的中括号 旋转光标
我们将这4个字符覆盖式地显示| / - \\就可以得到我们想要的效果。
\\是因为要取字面值才能得到我们想要的\
然后我们可以比较巧妙地这样来显示 这个进度条可以跑了但是没法使用。
如果未来我们是在下载东西的时候打印进度条 这样进度条的进度与我们的下载进度不符。
真实版本
应该是边下载边更新。 所以我们接下来把process.h改成 然后我们再来写process.c 然后会看到报错 所以我们要这样 然后我们就可以得到: 然后我们发现没到100需要改一下这里 最后修改
我们最后将其改为回调函数形式的更好 Thanks♪(ω)