Блоки и отступы
В блоке может быть сколько угодно инструкций. Всё, что стоит между { и }, принадлежит блоку, и когда условие истинно, выполняется всё это по очереди:
int temperature = 32;
if (temperature > 30) {
std::cout << "Очень жарко" << std::endl;
std::cout << "Пейте больше воды" << std::endl;
}
std::cout << "Хорошего дня" << std::endl;Программа выведет:
Очень жарко
Пейте больше воды
Хорошего дняБлок заканчивается закрывающей фигурной скобкой }. Строка с Хорошего дня стоит после неё, в блок не входит и поэтому выполняется всегда, истинно условие или нет.
Строки блока написаны с отступом: они начинаются с 4 пробелов. Компилятору отступы безразличны. Что входит в блок, решают только фигурные скобки, и программа работала бы, даже если бы вы вообще не делали отступов. Отступы нужны людям: по ним сразу видно, какие строки принадлежат блоку, поэтому программисты всегда их делают. Считать пробелы не нужно. Когда вы нажимаете Enter после {, редактор сам делает отступ в следующей строке, а клавиша Tab тоже вставляет 4 пробела.
Раз блок определяют скобки, а не отступы, отступы могут даже ввести в заблуждение:
int temperature = 20;
if (temperature > 30) {
std::cout << "Очень жарко" << std::endl;
}
std::cout << "Пейте больше воды" << std::endl;Программа выведет:
Пейте больше водыПоследняя строка кода сдвинута вправо, но стоит после }, поэтому в блок не входит и выполняется даже при 20 градусах.
То же самое будет, если опустить фигурные скобки. C++ это позволяет, но тогда к if относится только одна инструкция, которая стоит сразу после условия:
int temperature = 20;
if (temperature > 30)
std::cout << "Очень жарко" << std::endl;
std::cout << "Пейте больше воды" << std::endl;Этот код тоже выводит Пейте больше воды, потому что вторая строка к условию не относится, как её ни сдвигай. Поэтому в этом курсе фигурные скобки пишутся всегда, даже вокруг одной инструкции.
Если забыть закрывающую скобку }, компилятор сообщит error: expected '}'. Ошибка указывает на конец программы, потому что именно там компилятор понимает, что скобки не хватает. Но искать её нужно выше: после последней строки блока, который вы не закрыли.
Задание
- 1
Программа просит подключить зарядку, хотя аккумулятор заряжен на 80%. Строка, выводящая
Подключите зарядку, сдвинута вправо, но стоит после}. Перенесите}под неё, чтобы строка входила в блок инструкцииif. Тогда программа выведет толькоЗаряд: 80%. - 2
Измените
batteryна15и запустите программу. Теперь условие истинно, и программа выводит все три строки:Низкий заряд Подключите зарядку Заряд: 15%