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 回答
4
while(count < 10)
    cout << "the number after " << count; //Increment function

这是一个无限循环,因为 count始终是相同的值,并且不会被此循环更改。

这就是为什么你必须在循环周围有括号({}),否则你会犯这样的错误。

重写你的代码,并说明发生了什么:

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
}
于 2013-07-03T16:19:06.853 回答
1

有两个主要问题,你缺少while循环的大括号,应该如下:

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

第二个问题是,你是按值传递countIncrement,如果你想更新count你可以通过引用传递:

 void Increment (int &nextNumber)
于 2013-07-03T16:17:10.813 回答
1

您是count按值传递的,因此它不会增加。按值传递意味着在函数中使用变量的本地副本并且它不会影响原始变量。您需要使用 传递地址& operator。你可以使用这个: -

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

您也没有用大括号括起来while 循环{ },这可能会对程序的执行产生不良影响。

于 2013-07-03T16:18:02.797 回答
1

您的Increment函数什么都不做,因为它nextNumber 按 value接受参数。这意味着它对传递给它的变量的副本进行操作,因此当函数退出时,它的更改会丢失。相反,让它通过引用接受一个变量:

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
  while(count < 10)
  cout << "the number after " << count; //Increment function

您需要括号,否则 while 只会一遍又一遍地执行 cout 而不执行增量函数

于 2013-07-03T16:18:41.690 回答
0

您通过值传递的问题。当您将数字传递给 Increment 时,它会创建一个名为 nextNumber 的副本并递增它。此更改不会反映在发送的参数中。因此计数从未增加。

要纠正 ,您可以从增量返回值或调用被引用。

按值调用

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 回答