C++
If else в C++: можно ли использовать только else
В C++ нельзя использовать else само по себе. else всегда относится к оператору if. Оно означает: выполнить этот блок, если условие в if оказалось ложным
Правильно:
if (age >= 18) {
std::cout << "Доступ разрешен\n";
} else {
std::cout << "Доступ запрещен\n";
}
Неправильно:
else {
std::cout << "Так писать нельзя\n";
}
Компилятор выдаст ошибку, потому что else не знает, к какому if оно относится
Почему else не имеет условия
else — это ветка «во всех остальных случаях». Условие пишется в if, а else срабатывает, когда это условие не выполнено
int temperature = 15;
if (temperature > 20) {
std::cout << "Тепло\n";
} else {
std::cout << "Не тепло\n";
}
Если temperature > 20 истинно, выполнится первый блок. Если ложно, выполнится else
Если нужно проверить другое условие
Тогда используйте else if:
if (score >= 90) {
std::cout << "Отлично\n";
} else if (score >= 70) {
std::cout << "Хорошо\n";
} else if (score >= 50) {
std::cout << "Удовлетворительно\n";
} else {
std::cout << "Нужно повторить тему\n";
}
Здесь else в конце означает: если ни одно условие выше не подошло
Можно ли сделать пустой if и только else
Технически можно написать так:
if (isReady) {
// ничего не делаем
} else {
start();
}
Но это плохой стиль. Лучше инвертировать условие:
if (!isReady) {
start();
}
Код стал короче и понятнее: если не готово, запускаем
Когда нужен switch и default
Если вы хотите ветку «по умолчанию», но проверяете не одно логическое условие, а несколько значений, может подойти switch
switch (command) {
case 1:
std::cout << "Открыть\n";
break;
case 2:
std::cout << "Сохранить\n";
break;
default:
std::cout << "Неизвестная команда\n";
break;
}
default похож по смыслу на else: он срабатывает, если ни один case не подошел. Но default используется внутри switch, а не вместо else в любом месте программы
К какому if относится else
Если рядом несколько if, else относится к ближайшему незакрытому if
if (a > 0)
if (b > 0)
std::cout << "a и b положительные\n";
else
std::cout << "b не положительное\n";
Здесь else относится к if (b > 0), а не к if (a > 0). Чтобы избежать путаницы, лучше всегда использовать фигурные скобки:
if (a > 0) {
if (b > 0) {
std::cout << "a и b положительные\n";
} else {
std::cout << "b не положительное\n";
}
}
Частые ошибки
Писать else без if
Так нельзя по синтаксису языка. Перед else должен быть соответствующий if
Ставить точку с запятой после if
Проблемный код:
if (x > 0);
else {
std::cout << "x <= 0\n";
}
Точка с запятой завершает if, и код ломается. Пишите без нее:
if (x > 0) {
std::cout << "x > 0\n";
} else {
std::cout << "x <= 0\n";
}
Заменять else пустым блоком
Если нужна только отрицательная проверка, используйте !condition
Короткий вывод
В C++ else нельзя использовать отдельно от if. Если нужна ветка «иначе», пишите if (...) { ... } else { ... }. Если нужно только действие при ложном условии, инвертируйте условие и обойдитесь без else
Связанные материалы:
Что почитать дальше по C++
Если нужен общий маршрут по теме, откройте рубрику C++. Для соседних задач пригодятся эти разборы:
- Сайт на C++: можно ли сделать и когда это имеет смысл
- C++ с нуля: первый файл, переменные и вывод
- Enter в C++: перенос строки, std::endl и ввод через cin
- Microsoft Visual C++ 14.0: что это, зачем нужен и как исправить ошибку установки