2017-04-09 128 views
1

我对编码相当陌生,而且我正在学习C.我的班级老师给了一个编写程序的任务,它会告诉我们哪些整数是“完美数字”(数字中的因素不包括数字本身加起来的数字,例如,6 = 1 + 2 + 3,所以6是一个完美的数字。)我正在面对我写的代码的一些麻烦,并希望得到一些建议。用C程序找到完美数字

#include <stdio.h> 

int main(void) { 
    int number, counter, sum; 

    sum = 0; 

    printf("For the integers from 1 to 1000:\n"); 

    for (number = 1; number <= 1000; number++) { 
     counter = 1; 
     while (counter <= number - 1) { 
      if ((number - 1) % counter == 0) { 
       sum += counter; 
      } 
     } 
     if (sum == number) { 
      printf("%d is a perfect number.\n", number); 
     } 
    } 

    return 0; 
} 

这是我写的代码。我面临的问题是,当我运行程序时,它只打印“对于从1到1000的整数:”,然后停止。该程序甚至不会终止或任何事情。

除了我刚才提到的问题,任何建议或建议的话都非常感谢。

谢谢!

+2

如果输入'while'循环是无限的。 –

+1

'如果((数字-1)%计数器== 0){'这会给你'number-1'的完美数字。用'if((数字)%计数器== 0){'替换它。 – AntonH

+0

在while循环中修改了'number'和'counter',while-condition的唯一两个变体。一旦你进入,你永久。 *某些*必须改变。 – WhozCraig

回答

3

你的程序不退出的原因是因为你有一个无限的while循环。 counter将始终小于number - 1,因为它们都不在循环内进行修改。一些IDE会为您提供语法高亮样式的警告。为了解决这个问题,添加一个增量的抗辩:

while (counter <= number - 1) { 
    if ((number - 1) % counter == 0) { 
     sum += counter; 
    }   
    counter++; 
} 

顺便说一句,你也有一个逻辑错误(没有做的无限while循环)在if ((number - 1) % counter == 0)。这将检查输入的数字的递减是否完美。您应该将其更改为if (number % counter == 0)

+0

啊,我明白你是对的。建议!下次我会更加小心。 – Sean

+0

@ABusyProgrammer考虑建议[当某人回答我的问题时该怎么办?](http://stackoverflow.com/help/someone-answers)而不是https:// meta .stackoverflow.com/q/287723/2410359 – chux

+0

@Sean根据StackOverflow指南和chux的建议,[如果有人回答我的问题应该怎么做](http://stackoverflow.com/help/someone-answers),您可以通过upvoting欣赏一个好的答案,或者如果它适合你,接受它。 –