c/c++语言开发共享如何使用printf制作“进度条”?

许多命令行工具实现了基于文本的进度条。 像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

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐