ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В 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.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
