Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 执行程序时显示完成进度_C_Loops - Fatal编程技术网

C 执行程序时显示完成进度

C 执行程序时显示完成进度,c,loops,C,Loops,我想在C程序运行时以百分比的形式显示它的进度。程序中的实际工作(其进度应被测量)被限制在一个循环中。以下是我尝试过的: int i; int to = 100000000; while (i++ < to) { printf("\rPercent done: %d", (100 * i)/to); } inti; 整数到=100000000; while(i++inti=0;取而代之) 您的“进度计数器”将只计算循环中的进度。一旦完成百分比:100将被打印,只有循环将结束 您正

我想在C程序运行时以百分比的形式显示它的进度。程序中的实际工作(其进度应被测量)被限制在一个循环中。以下是我尝试过的:

int i;
int to = 100000000;

while (i++ < to) {
    printf("\rPercent done: %d", (100 * i)/to);
}
inti;
整数到=100000000;
while(i++
这可能是一个愚蠢的问题,但如何在一段时间内显示进度 程序正在运行吗

不是这样的

您有多个问题:

  • 您的
    i
    未初始化,因此程序将打印垃圾。(修正:->
    inti=0;
    取而代之)
  • 您的“进度计数器”将只计算循环中的进度。一旦
    完成百分比: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;
}
#包括
内部主(空){
int i=0;
整数到=100000000;
while(i++
请注意,这只会准确反映程序执行循环的程度。循环之前/之后的任何工作都不会通过该方法进行测量


这仅为每个完整百分比打印控制台消息。仍然令人讨厌的是,你收到了100条控制台消息,但远没有打到
printf
的100.000.000(!)电话那么糟糕。尽管如此,这仍然会对性能产生影响。

这会非常缓慢,但应该可以工作,当您初始化i时。@KamiKaze,如何创建一个活动的i?它在哪里自我更新?除了你的代码被破坏之外,你不能用纯标准C做你要求的事情。你必须使用给定操作系统的控制台API将控制台光标设置在你喜欢的地方,然后实现多线程。