佛山网站优化美姿姿seo,购物网站模版,沧州网站seo公司,织梦网站中的对话框怎摸做一#xff1a;\r 和 \n \r --- 回车 --- 使光标回到这一行的开头
\n --- 换行 --- 会来到下一行与之平行的位置 缓冲区的问题#xff1a;
1: \n 的示例 正常输出 hehehehe 。
2: \r 的示例
为了方便观察#xff0c;加入一个 sleep #xff08;休眠函数…一\r 和 \n \r --- 回车 --- 使光标回到这一行的开头
\n --- 换行 --- 会来到下一行与之平行的位置 缓冲区的问题
1: \n 的示例 正常输出 hehehehe 。
2: \r 的示例
为了方便观察加入一个 sleep 休眠函数使其休眠2秒观察其结果 现象为停顿两秒后没有输出 hehehehe ,而是出现输入命令行。
3: 两者对比
上述两种情况出现是行缓冲区存在导致的\n 是一种刷新策略行刷新有刷新缓冲区的作用所以它可以立即显示输出结果。而在 \r 的程序时使用 printf 函数每次打印一个字符光标就会向后移动当走到 \r 时光标又会回到该行的起始位置最终会被命令行提示符覆盖导致程序得不到想要的结果。
4: 刷新输出缓冲区ffush(stdout))
在休眠两秒之前刷新输出缓冲区 现象hehehehe 程序运行后立刻输出光标始终位于一行的起始位置两秒后被命令行提示符覆盖掉。 5: 不带 \r 和 \n 的情况 运行现象为先休眠两秒然后输出hehehehe , 同一行后面输出命令行提示符。
我们知道在C语言中代码的执行顺序是由上而下进行的所以肯定是先执行的 printf 函数然后执行 sleep 函数但是代码的运行现象并非先打印后休眠而是先休眠后打印 --- 为什么
原因hehehehe 没有被刷新,在 sleep 期间 hehehehe 一直保留在缓冲区中直到程序结束系统自动刷新缓冲区才会显示出来所以我们观察到的现象为先休眠两秒然后输出 hehehehe 。
二进度条代码实现 1.倒计时示例 经过上述缓冲区问题我们可以知道\r 前面的内容如果要打印出来需要及时刷新输出缓冲区通过 fflush 函数实现我们为了看到倒计时的结果可以让其每隔一秒钟打印一次。 QQ录屏20231015215917 我们发现所得现象并不是我们理想的现象若要得到理想状态的现象需要修改 printf 的输出格式
在此处需要注意打印的格式%2d 表示预留两个位置 %d 表示预留一个位置。 QQ录屏20231015220103 2.进度条简易版 我们实现一个前面显示图形然后显示加载进度最后显示其是否在运行或者卡住的形式。 我们可以看到该代码最后的结果会被命令行提示符覆盖掉在此处我们在最后使用 \n 刷新缓冲区。 接下来我们来解决打印方向的问题常规来说应该从右向左在此处为从左向右我们需要改变 printf 的输出格式。即在输出格式前面加 - 号。 接下来我们来打印一个标识来辅助说明程序是否在运行 至此一个简单的进度条就完成了。
我们观察一下动态版的进度条 QQ录屏20231015233138 2.进阶版
结合具体的场景实现进度条示例为我们需要下载一个东西其已经下载的大小和东西大小的比率来控制进度条的进度 我们观察一下动态的进度条 QQ录屏20231016211813 3.美化版
我们的输出一般都是黑底白字其实 printf 函数可以实现彩色打印在此处我们参考文章printf函数彩色打印
在此处 我们对上述代码printf函数部分进行修改使其可以进行彩色输出。
示例代码为黄底白字 我们观察一下动态的进度条 QQ录屏20231016213031