许多命令行工具实现了基于文本的进度条。 像rpm安装一样:
安装############## [45%]
#
随着百分比的增长而增长,同时保持一条线 。 我想要的是类似的东西:我需要一个只需一行的进度指示器,也就是说,当百分比增长时,它被覆盖,而不是创建一个新行( n
)。
我试过这个:
#include int main (){ int i = 0; for (i = 0; i < 10000; i++){ printf("rIn progress %d", i/100); } printf("n"); }
r
工作覆盖单行。 但是, r
将光标移到行的开头, printf
将光标移到末尾,这导致光标快速波动。 你们可以通过一点编译来感受它。 任何人都可以提出替代方案来避免这个问题吗?
这是缓冲的stdout
流的问题。 您必须在printf()
之后使用fflush(stdout)
显式刷新它(使用n
进行隐式刷新printf()
:
fflush(stdout);
这是rpm如何做到的,也许你可以为自己的目的写一个类似的东西: printHash 。
rpm
使用b
而不是r
来逐字符擦除输出行。
我相信使用
printf("e[?25l");
也许可以提供帮助。 这将隐藏光标。 老实说,我不确定再次使用/ r或printf是否会覆盖那段代码并显示光标,但值得一试。 此外,以下代码可用于再次显示光标。
printf("e[?25h");
我建议您阅读系统的termcap和terminfo的手册页,而不是给出一些错误的和不可移植的代码行。 一开始有点难以理解,但如果您要开始使用依赖于终端的代码,那么这是必须阅读的。 维基百科页面是一个很好的起点,但是也可以将系统上的手册页也读取。
此外,我刚刚意识到你的问题绝对是一些其他问题的重复 。
要在终端上使用格式,请检查ANSI转义码 。
需要了解更多c/c++开发分享如何使用printf制作“进度条”?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享如何使用printf制作“进度条”?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979090.html