Не завершающийся цикл - PullRequest
       12

Не завершающийся цикл

0 голосов
/ 30 июня 2011

Мне было просто интересно.У меня есть следующий код:

#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 ]

8 голосов
/ 30 июня 2011
if (counter = 1) 

это должно быть

if (counter == 1) 

в противном случае вы будете сбрасывать счетчик на 1 на каждой итерации.

4 голосов
/ 30 июня 2011

if (counter = 1) переназначает 1 для счетчика каждого цикла, это всегда < 10.

Вы хотите if (counter == 1).

4 голосов
/ 30 июня 2011

Распространенная ошибка:

if( counter = 1) // assignment operator

Это установит значение counter на 1 на каждой итерации, и цикл никогда не завершится.

Вы должны использовать

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

это именно то, что вы имеете в виду

3 голосов
/ 30 июня 2011
  if (counter = 1)

Это не сравнивает counter и 1, оно присваивает 1 counter, а затем проверяет counter - мы просто установили 1, так что оно всегда будет положительным и всегда будет <= 10.

1 голос
/ 30 июня 2011

Ваш первый пример имел

if (counter = 1)

вместо

if (counter == 1)

, поэтому оператор if будет сбрасывать счетчик на 1 во время каждой итерации.

1 голос
/ 30 июня 2011

Линия

if (counter = 1)

Должно быть

if (counter == 1)

поскольку вы хотите сравнивать, а не присваивать значение.

0 голосов
/ 30 июня 2011

Вы назначаете 1 счетчику, а не сравниваете его, используйте == вместо =

0 голосов
/ 30 июня 2011
if (counter = 1)

Итак, counter значение равно 1 навсегда.

0 голосов
/ 30 июня 2011

Ваша проблема здесь:

if (counter = 1)

Назначение вместо сравнения.Компилировать с более высоким уровнем предупреждения.

0 голосов
/ 30 июня 2011

Как и другие замечания, это распространенная ошибка. Вы можете избежать этого, набрав

if( 1 == counter )

вместо

if( counter == 1 )

так

if( 1 = counter )

не будет компилироваться (если вы допустили ошибку и забыли '=').

...