Вложенные условия
В блоке кода может быть любой код, даже ещё одна инструкция if. if внутри блока другого if называется вложенным условием. Оно полезно, когда один вопрос имеет смысл только после другого. В кино, например, сначала проверяют, есть ли у зрителя билет, и только потом — сколько ему лет:
bool hasTicket = true;
int age = 15;
if (hasTicket) {
if (age >= 18) {
std::cout << "Приятного просмотра" << std::endl;
} else {
std::cout << "Простите, этот фильм только для взрослых" << std::endl;
}
} else {
std::cout << "Сначала купите билет" << std::endl;
}Программа выведет:
Простите, этот фильм только для взрослыхВнутренняя инструкция if выполняется, только когда hasTicket истинно. Каждый else относится к тому if, блок которого заканчивается скобкой } прямо перед ним: первый — к if (age >= 18), второй — к if (hasTicket). Отступы показывают это с первого взгляда: внутренние блоки сдвинуты ещё на 4 пробела, то есть всего на 8, а каждый else стоит с таким же отступом, как его if.
Вложенные условия часто можно переписать с помощью && и else if. Этот код делает то же самое:
bool hasTicket = true;
int age = 15;
if (hasTicket && age >= 18) {
std::cout << "Приятного просмотра" << std::endl;
} else if (hasTicket) {
std::cout << "Простите, этот фильм только для взрослых" << std::endl;
} else {
std::cout << "Сначала купите билет" << std::endl;
}Программа доходит до else if (hasTicket), только когда первое условие ложно. Если билет есть, это значит, что зрителю нет 18 лет. Оба способа правильные: выбирайте тот, который легче читать.
Если ни у одной из двух инструкций if нет else, один if с && почти всегда понятнее. Эти два условия:
if (hasTicket) {
if (age >= 18) {
std::cout << "Приятного просмотра" << std::endl;
}
}делают то же самое, что одно условие с одним уровнем отступа меньше:
if (hasTicket && age >= 18) {
std::cout << "Приятного просмотра" << std::endl;
}Задание
- 1
Кататься на американских горках можно только тем, кому не меньше 10 лет и при этом не меньше 140 см роста. Перепишите две вложенные инструкции
ifв одну инструкциюif, которая соединяет оба условия с помощью&&. Программа по-прежнему выводитМожно кататься на американских горках. - 2
Добавьте новой инструкции
ifветкуelse, которая выводитКататься на американских горках пока нельзя, и изменитеageна8. Программа выведетКататься на американских горках пока нельзя. С вложенными условиями понадобились бы две одинаковые веткиelse, по одной для каждогоif.