为什么我会得到一个无限循环(因子)?

时间:2018-03-05 07:00:43

标签: c++ for-loop if-statement while-loop

  

正整数n的正确除数是除了n本身以外均匀划分n的所有正整数。例如,16的适当除数是1,2,4和8.

大量数是一个大于0的整数,因此其适当除数之和大于整数。例如,12是丰富的,因为1 + 2 + 3 + 4 + 6 = 16,其大于12。

缺陷数是大于0的整数,使得其适当的除数之和小于整数。例如,8是不足的,因为1 + 2 + 4 = 7,小于8。

完全数是一个大于0的整数,因此其正确除数的总和等于整数。例如,6是完美的,因为1 + 2 + 3 = 6。

enter image description here

#include <iostream>
#include <cctype>
#include <iomanip>
#include <cmath>
using namespace std;

    int main()
    {
      int current;
      int possible;
      int sum=0;
      int facts=0;

      cin >> current;
  

目前是:17 -5 246

      while(cin){
        cout << current;
        for (possible=1; possible<= current; possible++)
          {
            if(current%possible==0)
              {
              sum= sum + possible;
              facts++;
             if(sum-current > current)
              cout << "is abundant and has" << facts  << "factors" << endl;
            if(sum-current < current)
              cout << "is deficient" << endl;
            if(current < 2)
              cout << "is not abundant, deficient or perfect" << endl;
            if(current == sum-current)
              cout << "is perfect" << endl;

          }
        }
      }

        return 0;
      }
  

这是我应该得到的:   17是不足的   -5不丰富,不足或完美。   246丰富,有8个因素   相反,我得到一个无限循环

2 个答案:

答案 0 :(得分:1)

问题是您使用 cin 作为 while 循环的条件,因为循环将继续执行直到那里&#39 ; s不再需要读取数据。

参考What's the difference between while(cin) and while(cin >> num)

而是在循环中输入当前数字,即

while(cin >> current){
    /* Your code */
}
  

注意:

     

要在Linux终端中停止读取用户的输入,请输入Ctrl + D

而且我也看到你的逻辑不对,所以你可能会得到错误的结果,而这必须你自己解决。

答案 1 :(得分:0)

您可以使用int current [3]而不是int current 并检查接收当前数组的结尾而不是while(cin)