在程序执行期间显示完成进度

Jos*_*osh -2 c loops

我希望在C程序运行时以百分比显示它的进度.应该测量进度的程序中的实际工作被限制在一个循环中.这是我尝试过的:

int i;
int to = 100000000;

while (i++ < to) {
    printf("\rPercent done: %d", (100 * i)/to);
}
Run Code Online (Sandbox Code Playgroud)

Mag*_*sch 7

可能是一个愚蠢的问题,但是如何在程序运行时显示进度?

不是这样的.

你有几个问题:

  • i是未初始化的,所以该程序将打印垃圾.(修复: - > int i = 0;代替)
  • 您的"进度计数器"将仅计算循环中的进度.一旦Percent done: 100打印出来,只有循环结束.
  • 您正在向控制台打印1亿行.也许再想想.
  • 随着(i*100)/to你在整个过程中遇到整数溢出,所以请i / (to / 100)改用.请注意,编译器可以根据编译器自行优化.

一点点令人讨厌的方式是:

#include <stdio.h>

int main (void) {

    int i = 0;
    int to = 100000000;

    while (i++ < to) {
        if (i % 1000000 == 0) {
            printf("\rPercent done: %d",  i / (to / 100));
        }
        dostuff();
    }
    printf("\rLoop finished");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这只会准确反映程序执行循环的程度.循环之前/之后的任何工作都不会被测量.

这仅为每个完整百分比打印控制台消息.仍然令人讨厌的是你得到了100条控制台消息,但远不及100.000.000(!)调用那么糟糕printf.尽管如此,这仍然是对性能的影响.