遇到永远循环问题

时间:2017-11-09 17:45:43

标签: c

#include <stdio.h>

int main(){
    int n,copy,counter=0,prevcounter,prev;
    scanf("%d",&n);
    while(n>0){
        counter = 0;
        n--;
        copy = n;
        while(copy>0){
            --copy;
            if(n%copy==0){
                counter++;}
                if(copy==0)break;    
            }
        if(counter>prevcounter){
            prevcounter = counter;
            prev = n;
        }

    }
    printf("%d",prev);
}

所以这是我的代码:问题是这段代码永远循环,问题就在这里

while(copy>0)

但如果我将其更改为

while(copy>1)

它正在工作....我想知道它为什么会永远循环但我无法找到答案..我正在减少副本,当它变为0时它应该从循环中断...我甚至添加另一张支票

if(copy==0)break;

但它仍然没有用。任何sugestions?谢谢

1 个答案:

答案 0 :(得分:3)

%时也使用copy=0。这是导致未定义行为的错误。(除以零)。

prevcounter未初始化。

代码将是这样的: -

#include <stdio.h>

int main(){
    int n,copy,counter=0,prevcounter=0,prev;
    scanf("%d",&n);
    while(n>0)
    {
        counter = 0;
        n--;
        copy = n;
        while(copy>0)
        {
            --copy;

            if(copy && n%copy==0){
                counter++;
            }

        }
        if(counter>prevcounter){
            prevcounter = counter;
            prev = n;
        }
    }
    printf("%d",prev);
}

您需要考虑执行期间可能出现的copy的所有值。在循环中,您将排除copy变为零且if(copy && n%copy==0)确保此情况的情况。