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

时间:2016-10-21 10:48:34

标签: c loops

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

int i;
int to = 100000000;

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

1 个答案:

答案 0 :(得分:7)

  

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

不喜欢这个。

您有多个问题:

  • 您的i未初始化,因此该程序将打印垃圾。 (修复: - &gt; 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;
}

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

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