循环时非终止

Non-terminating while loop

本文关键字:终止 循环      更新时间:2023-10-16

我只是想知道一些事情。我有以下代码:

#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 << "nnThe 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 << "nnThe largest number is: " << largest << endl;
    system("pause");
    return 0;
}

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

if (counter = 1) 

这应该是

if (counter == 1) 

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

if (counter = 1)重新分配 1 来对抗每个循环,这总是< 10

你想要if (counter == 1).

一个常见的错误:

if( counter = 1) // assignment operator

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

你应该使用

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

这正是你的意思

  if (counter = 1)

这不会比较counter1,它将1分配给counter然后检查counter - 我们刚刚设置为1,因此它将始终是积极的并且始终是<= 10的。

if (counter = 1)

应该是

if (counter == 1)

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

你的第一个例子有

if (counter = 1)

而不是

if (counter == 1)

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

你的问题在这里:

if (counter = 1)

分配而不是比较。使用更高的警告级别进行编译。

if (counter = 1)

因此,counter值永远是 1。

你分配 1 来计数器而不是比较它,使用 == 而不是 =

请注意,这是一个常见的错误。您可以通过键入来避免它

if( 1 == counter )

而不是

if( counter == 1 )

因为

if( 1 = counter )

不会编译(如果您犯了错误并忘记了"="(。