Главная->Інформатика та програмування->Содержание->if и else во вложенных ветвлениях

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 3) онлайн

if и else во вложенных ветвлениях

Во вложенных ветвлениях if...else возникает сложность установления соответст- вий между else и if. Часто можно перепутать, к какому из операторов if относится данный блок else. Программа BADELSE является примером, содержащим типич- ную ошибку, допускаемую при вложении ветвлений if...else.

// badelse.cpp

// неправильное сопоставление else и if во вложенных ветвлениях #include  <iostream>

 

using namespace std;

int main() {

int a, b, c;

cout << "Введите числа a, b и с: \n"; cin >> a >> b >> c; if ( a == b )   if( b == c )     cout << "a, b, и с равны\n";

else

  cout << "а и b не равны\n"; return 0;

}

Мы использовали ввод нескольких значений с помощью одного оператора с участием cin. Трижды вводя значения и нажимая клавишу Enter, вы инициали- зируете переменные a, b и с.

Что будет происходить в том случае, если вы последовательно введете значе- ния 2, 3 и 3? Значения переменных а и b не равны, поэтому первое условие не будет выполнено и вы, вероятно, ожидаете, что программа перейдет к исполне- нию инструкций else и напечатает сообщение "а и b не равны". Но на самом деле ничего не печатается. Почему? Потому, что вы связываете else не с тем из опе- раторов if. Вы, скорее всего, думаете, что else относится к первому из if-ветвле- ний, но на самом деле он связан со вторым. Общее правило выглядит так: else связан с последним из операторов if, который не имеет своего собственного блока else. Правильное использование if и else будет выглядеть так:

if ( a == b )   if ( b == с )

cout << "a, b, и с равны\n";   else

cout << "b и с не равны\n";

Мы изменили выравнивание и фразу, выводимую в теле else. Теперь в слу- чае, если будут введены значения 2, 3 и 3, по-прежнему ничего не будет печа- таться, но если ввести значения 2, 2 и 3, то на экране появится фраза

b и c не равны

Если вам необходимо связать else с тем if, который расположен раньше, нуж- но использовать фигурные скобки:

if ( a == b ) {

  if ( b == с )

  cout << "a. b и с равны";

}

else

  cout << "а и b не равны";

Здесь else связан с первым оператором if, поскольку скобки делают второй по счету if невидимым для блока else.

 

31