Логические операторы: или
Второй логический оператор — || (две вертикальные черты подряд), он означает «или». «Если сегодня суббота или воскресенье, то выходной»:
std::string day = "воскресенье";
if (day == "суббота" || day == "воскресенье") {
std::cout << "Сегодня выходной" << std::endl;
}Программа выведет:
Сегодня выходнойУсловие с || истинно, если истинна хотя бы одна его часть. Ложно оно только тогда, когда ложны все:
true || true— этоtruetrue || false— этоtruefalse || true— этоtruefalse || false— этоfalse
Частая ошибка — сократить условие, как мы говорим: day == "суббота" || "воскресенье". Тогда правая часть — просто строка "воскресенье", а не сравнение. Строка в кавычках в условии считается истиной, поэтому всё условие истинно всегда, даже в понедельник. А программа компилируется без ошибок и даже без предупреждения. У каждой части должно быть своё сравнение: day == "суббота" || day == "воскресенье".
В одном условии можно использовать && и || вместе. Как умножение выполняется раньше сложения, так && выполняется раньше ||. То, что относится друг к другу, группируйте круглыми скобками, как в математике:
std::string day = "суббота";
int temperature = 15;
if ((day == "суббота" || day == "воскресенье") && temperature > 20) {
std::cout << "Едем за город" << std::endl;
} else {
std::cout << "Остаёмся дома" << std::endl;
}Программа выведет:
Остаёмся домаСначала вычисляется часть в скобках: сегодня суббота, значит, она истинна. Но temperature > 20 ложно, а true && false — это ложь. Без внутренних скобок программа сначала соединила бы day == "воскресенье" && temperature > 20, и условие выполнялось бы каждую субботу, какая бы ни была погода. Внешние скобки относятся к самой инструкции if, поэтому в начале условия их две.
Задание
- 1
Кинотеатр даёт скидку студентам и людям от 65 лет. Напишите инструкцию
if, которая выводитСкидка, еслиisStudentистинно илиageне меньше65. Используйте||. - 2
Новое правило: скидки действуют только по средам. Добавьте в конец условия
&& day == "среда", возьмите часть с||в скобки и добавьте веткуelse, которая выводитПолная цена. Сегодня понедельник, поэтому программа выведетПолная цена.