非终止while循环

时间:2011-06-30 13:34:29

标签: c++ while-loop

我只是在想什么。我有以下代码:

#include <iostream>
using namespace std;

int main()
{
    int number, largest, counter = 1;
    while (counter <= 10)
    {
          cout << "Enter a number: ";
          cin >> number;
          if (counter = 1)
          {
               largest = number;
          }
          else if (number > largest)
          {
               largest = number;
              }
          counter++;
    }
    cout << "\n\nThe largest number is: " << largest;
    system("pause");
    return 0;
} 

问题是,它永远不会终止。我确实设法通过稍微修改代码来解决问题,但我想知道为什么会发生这种情况。这是固定代码:

#include <iostream>
using namespace std;

int main()
{
    int number, largest, counter = 1;
    cout << "Enter a number: ";
    cin >> number;
    largest = number;
    while (counter < 10)
    {
      cout << "Enter a number: ";
      cin >> number;
      if (number > largest)
      {
           largest = number;
      }
      counter++;
    }
    cout << "\n\nThe largest number is: " << largest << endl;
    system("pause");
    return 0;
}

似乎在删除else if语句后它起作用了。发生了什么事?

10 个答案:

答案 0 :(得分:8)

if (counter = 1) 

这应该是

if (counter == 1) 

否则,您将在每次迭代时将计数器重置为1。

答案 1 :(得分:4)

一个常见的错误:

if( counter = 1) // assignment operator

这将在每次迭代时将counter的值设置为1,并且循环永远不会完成。

你应该使用

if( counter == 1) // equality operator
           ^^^^

这正是你的意思

答案 2 :(得分:4)

if (counter = 1)重新分配1来计算每个循环,这始终是< 10

您想要if (counter == 1)

答案 3 :(得分:3)

  if (counter = 1)

这不会与counter1进行比较,它会将1分配给counter,然后检查counter - 我们设置为1所以它总是积极的,永远是<= 10

答案 4 :(得分:1)

该行

if (counter = 1)

应该是

if (counter == 1)

因为你想比较,而不是分配价值。

答案 5 :(得分:1)

你的第一个例子是

if (counter = 1)

而不是

if (counter == 1)

因此if语句会在每次迭代期间将计数器重置为1。

答案 6 :(得分:0)

另见通知,这是一个常见的错误。您可以通过键入

来避免它
if( 1 == counter )

而不是

if( counter == 1 )

因为

if( 1 = counter )

无法编译(如果您输入错误并忘记了'=')。

答案 7 :(得分:0)

你的问题在这里:

if (counter = 1)

分配而不是比较。编译具有更高的警告级别。

答案 8 :(得分:0)

if (counter = 1)

因此,counter值永远为1。

答案 9 :(得分:0)

您将1分配给计数器而不是比较它,使用==而不是=