×
Traktatov.net » Освой самостоятельно С++ за 21 день » Читать онлайн
Страница 45 из 448 Настройки

Листинг 4.8. Пример использования фигурных скобок для правильного сопоставления операторов else и if

1: // Листинг 4.8. Пример использования фигурных скобок

2: // в конструкциях с вложенными операторами if

3: #include

4: int main()

5: {

6:    int x;

7:    cout << "Enter а number less than 10 or greater than 100: ";

8:    cin >> x;

9:    cout << "\n";

10:

11:   if (x >= 10)

12:     if (x > 100)

13:       cout << "More than 100, Thanks!\n";

14:     else // к какому оператору if относится этот оператор

15:       cout << "Less than 10, Thanks!\n";

16:

17:    return 0;

18: }


Результат:

Enter a number less than 10 or greater than 100

Less than 10, Thanks!


Анализ: Программа запрашивает ввод числа меньше 10 или больше 100 и должна проверить введенное значение на соответствие выдвинутому требованию, а затем вывести сообщение.

Если оператор if, расположенный в строке 11, возвращает true, то выполняется следующее выражение (строка 12). В нашем примере строка 12 выполняется в случае, если введенное число больше 10. Однако в строке 12 также содержится оператор if, который возвращает true, если введенное число не больше 100. Если же это число больше 100, выполняется строка 13.

Если введенное число меньше 10, оператор if в строке 11 возвратит false. В этом случае должно выполниться выражение за оператором else (строка 15), которое выводит на экран соответствующее сообщение. Но оказывается, что если ввести число меньше 10, то программа просто завершит свою работу.

Судя по отступу, оператор else в строке 14 образует единую конструкцию с оператором if в строке 11. Но в действительности оператор else связан с оператором if в строке 12, поэтому программа будет работать не так, как планировал программист.

С точки зрения компилятора в этой программе на языке C++ нет никаких ошибок. Программа не работает как хотелось из-за логической ошибки. Более того, даже при тестировании этой программы может создаться впечатление, что она работает правильно. Ведь при вводе числа больше 100 программа работает нормально и дефект не проявляется.

В листинге 4.9 показано, как можно исправить эту ошибку с помощью фигурных скобок.

Листинг 4.9. Пример надлежащего использования фигурных скобок в конструкции с оператором if

1: // Листинг 4.9. Пример надлежащего использования

2: // фигурных скобок для вложенных операторов if

3: #include

4: int main()

5: {

6:   int x;

7:   cout << "Enter а number less than 10 or greater than 100: ";

8:   cin >> x;

9:   cout << "\n";

10:

11:  if (x >= 10)

12:  {

13:    if (x > 100)

14:  cout << "More than 100, Thanks!\n";

15:  }

16:  else // теперь все ясно!

17:    cout << "Less than 10, Thanks!\n";

18:  return 0;

19: }


Результат:

Enter a number less than 10 or greater than 100: 20


Фигурные скобки, поставленные в строках 12 и 15, превращают все, что стоит между ними, в одно выражение, и теперь оператор else в строке 16 явно связан с оператором if, стоящим в строке 11, как и было задумано.

Пользователь ввел число 20, поэтому оператор if в строке 11 возвратил значение true; однако оператор if в строке 13 возвратил false, поэтому сообщение не было выведено на экран. Было бы лучше, если бы программист использовал еще один оператор else после строки 14, который выводил бы сообщение о том, что введенное число не отвечает требованиям.