0

このプログラムを実行しようとすると、無限ループ エラーが発生し続けます。誰でも私を助けて、理由を教えてもらえますか? どんな援助でも大歓迎です。ありがとう!

    void Increment(int);
    int main()
    {
      int count = 1;
      while(count < 10)
      cout << "the number after " << count; //Increment function
      Increment(count); //count+1
      cout << " is " << count << endl;
      return 0;
    }
    void Increment (int nextNumber)
    {
      nextNumber++; //parameter +1
    }
4

8 に答える 8

8

参照ではなく値で渡しています:

代わりにこれを行います:

void Increment (int& nextNumber)
{
  nextNumber++; //parameter +1
}

さらに、while ループの右中括弧がありません。

于 2013-07-03T16:16:57.670 に答える
4

whileループが複数の行を使用する場合は、中かっこが必要です。実際には、混乱を避けるために常に中かっこを使用する必要があります。さらに、Increment関数はそのパラメーターを参照で受け取る必要があるため、コピーでは動作しません (無限ループの別の原因)。

void Increment(int&);

int main()
{
    int count = 1;

    while (count < 10)
    {
        std::cout << "the number after " << count;
        Increment(count);
        std::cout << " is " << count << std::endl;
    }
}

void Increment(int& nextNumber)
{
    nextNumber++;
}
于 2013-07-03T16:18:33.753 に答える
1

count値がインクリメントされていないため、値で渡しています。値渡しとは、変数のローカル コピーが関数で使用され、元の変数には影響しないことを意味します。を使用してアドレスを渡す必要があります& operator。これを使用できます:-

void Increment (int& nextNumber)
{
  nextNumber++; 
}

また、プログラムの実行に望ましくない影響を与える可能性がある中かっこでwhile ループを囲んでいません。{ }

于 2013-07-03T16:18:02.797 に答える
1

あなたの関数は値によってIncrementパラメーターを受け入れるため、何もしません。これは、渡された変数のコピーで動作することを意味するため、関数が終了するとその変更は失われます。代わりに、参照によって変数を受け入れるようにします。nextNumber

void Increment (int &nextNumber)
    {
      nextNumber++; //parameter +1
    }

whileまた、ループ内のコードを次のように囲む必要があります{}

  while(count < 10)
  {
    cout << "the number after " << count; //Increment function
    Increment(count); //count+1
    cout << " is " << count << endl;
  }
于 2013-07-03T16:18:18.443 に答える
1

2 つの大きな問題があります。whileループのブレースがありません。次のようになります。

while(count < 10)
{
    cout << "the number after " << count; //Increment function
    Increment(count); //count+1
    cout << " is " << count << endl;
}

2 番目の問題は、更新したい場合は参照渡しできるcount値渡しです。Incrementcount

 void Increment (int &nextNumber)
于 2013-07-03T16:17:10.813 に答える
1
  while(count < 10)
  cout << "the number after " << count; //Increment function

ブラケットが必要です。それ以外の場合、while はインクリメント関数を実行せずに cout を何度も実行するだけです。

于 2013-07-03T16:18:41.690 に答える
0

値渡しの問題です。数値を Increment に渡すと、nextNumber というコピーが作成され、インクリメントされます。この変更は、送信された引数には反映されません。したがって、count は増加しませんでした。

修正するには、increment から値を返すか、be reference を呼び出すことができます。

値による呼び出し

int Increment (int nextNumber)
{
  return nextNumber+1; //parameter +1
}

ここでの呼び出しステートメントは次のとおりです。

count=Increment(count);

参照による呼び出し:

これが何を意味するのかわからないと思いますが、基本的には変数のアドレスを渡すので、インクリメントでコピーを作成するのではなく、元の変数自体で作業します。

void Increment (int& nextNumber)
{
  nextNumber++; //parameter +1
}

呼び出しステートメントは次のとおりです。

 Increment(count);

さらに質問がある場合はお尋ねください。

于 2013-07-03T16:17:39.737 に答える