如何使用printf制作"进度条"?

qwe*_*iop 19 c printf

许多命令行工具实现了基于文本的进度条.像rpm安装一样:

安装############## [45%]

#随着百分比的增长而增长,同时保持一条线.我想要的是类似的东西:我需要一个进度指示器只占一行,也就是说,当百分比增长时,它被覆盖,而不是创建一个新行(\n).

我试过这个:

   #include <stdio.h>

   int main (){
       int i = 0;
       for (i = 0; i < 10000; i++){
           printf("\rIn progress %d", i/100);
       }
       printf("\n");
   }
Run Code Online (Sandbox Code Playgroud)

\r可以覆盖单行.但是,\r将光标移到行的开头printf并将光标移到末尾,这会导致光标快速波动.你们可以通过一点点编译来感受它.任何人都可以提出替代方案来避免这个问题吗?

Ala*_*avi 14

这是stdout流被缓冲的问题.你必须显式刷新它(使用a \n进行隐式刷新)使用fflush(stdout)printf():

fflush(stdout);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!工作正常。其实我几乎没有缓冲流的概念,您能否提出一些解释或进一步的参考? (2认同)