2

C++ プログラミングは初めてで、プログラムの 1 つに問題があります

#include <iostream>
using namespace std;
bool IsPerfect(int n);

int main ()
{
  for(int i=1; i<100; i++){
    IsPerfect(i);
  }

  return 0;
}

bool IsPerfect(int n){
  int sum;
  for(int x=1; x<n; x++){
    if(n%x==0){
      sum+=x;
      return true;
      cout <<n;
    }
    else{
      return false;
    }
  }
}

完全数をリストするプログラムを作成しようとしていますが、印刷されない理由に関するバグが見つかりません。

4

7 に答える 7

3

returnここにステートメントを出力する前に、ステートメントがあります。

return true;
cout <<n;

これらのステートメントの順序を入れ替える必要があります。また、おそらくコンマまたはその他の区切り記号を追加する必要があります。

std::cout << n << ", " ;
return true;

ifそのステートメントを最初に入力したときに終了するため、そこから戻りたいかどうかはわかりません。これxは isのときに発生します1

于 2013-06-10T17:08:56.003 に答える
1

これらの回答はすべて、戻る前に番号を書くように指示しています。しかし、それはここでの貧弱な設計を無視しています: 数値が完全かどうかを決定する関数があります。この情報をどう処理するか (印刷する、保存する、ネットワーク経由で送信するなど) を決定するのもその関数であってはなりません。

名前IsPerfectが誤解を招くため、これによりコードが読みやすくなります。これは、この関数が数値が完全かどうかを返すだけであることを読者に伝えます。したがって、メイン関数のループは、「1 から 100 までの整数について、それが完全かどうかを尋ね、答えを無視する」と読みます。これは有用なプログラムではありません。

cout 行をIsPerfect完全に削除し、main代わりに挿入します。

for (int x = 1; x < 100; ++x) {
  if (IsPerfect(x)) {
    std::cout << x << '\n';
  }
}
于 2013-06-10T17:22:55.863 に答える
0

これを試して

if(n%x==0){
    sum+=x;
    cout <<n;
    return true;
}
于 2013-06-10T17:10:15.360 に答える
0

問題はここにあります:

if(n%x==0){
    sum+=x;
    return true;
    cout <<n;
}

キーワードreturnはすぐに関数を終了し、適切な値 ( true) を返します。これは、それに続くすべてのステートメントが実行されないことを意味します。次のことを試してください。

if(n%x==0){
    sum+=x;
    cout <<n;
    return true;
}
于 2013-06-10T17:11:27.437 に答える
0

他の人が指摘した問題に加えて、sum変数を初期化していないため、正しい答えを計算することはできません。変化する

int sum;

int sum=0;
于 2013-06-10T17:38:12.963 に答える