Операторы сравнения
Символы < и >, которые вы уже использовали в условиях, — это операторы сравнения: они сравнивают два значения, и результат — истина или ложь. В C++ их шесть:
==равно:5 == 5!=не равно:5 != 3>больше:5 > 3<меньше:3 < 5>=больше или равно:5 >= 5<=меньше или равно:3 <= 5
Все примеры в списке истинны. В !=, >= и <= знак равенства всегда стоит вторым, без пробела между символами. Следите за разницей между > и >= на границе: 18 > 18 — ложь, а 18 >= 18 — истина. Поэтому «18 лет и старше» записывается как age >= 18.
«Равно» записывается двумя знаками равенства, ==, потому что у одного знака уже есть другая работа: points = 10 присваивает, то есть записывает 10 в переменную points. А points == 10 сравнивает: спрашивает, хранится ли в points число 10, и ничего не меняет.
Если написать в условии = вместо ==, получится одна из самых частых ошибок. В C++ она особенно коварна, потому что программа компилируется и запускается:
int points = 7;
if (points = 10) {
std::cout << "Все баллы!" << std::endl;
}
std::cout << "Баллы: " << points << std::endl;Программа выведет:
Все баллы!
Баллы: 10points = 10 в условии ничего не сравнивает. Оно записывает 10 в points, и это значение затем используется как условие. C++ считает истиной любое число, кроме 0, поэтому условие истинно всегда, что бы ни хранилось в points раньше, а исходные 7 баллов к тому же пропали. Компилятор лишь выводит об этом предупреждение, которого в этом редакторе не видно. Если программа выполняет блок, который не должна, первым делом проверьте, не стоит ли в условии = вместо ==.
Сравнивать можно не только числа, но и строки:
std::string password = "kitten42";
if (password == "kitten42") {
std::cout << "С возвращением" << std::endl;
} else {
std::cout << "Неверный пароль" << std::endl;
}Программа выведет:
С возвращениемКак и в любой программе со std::string, не забудьте #include <string> в начале. Две строки равны, только если совпадают точно, символ в символ. Строчные и заглавные буквы — разные символы: если в переменной name хранится "Анна", то name == "анна" — ложь. "kitten42 " с пробелом в конце — тоже другая строка. Не забывайте про кавычки вокруг строки, с которой сравниваете. Без них password == kitten42 заставит компилятор искать переменную kitten42 и сообщить error: use of undeclared identifier 'kitten42'.
Задание
- 1
Интернет-магазин дарит подарок сотому покупателю. Запустите программу: она выводит поздравление и
Покупатель номер 100, хотя это покупатель номер 57. Исправьте условие так, чтобы оно сравнивало. Тогда программа выведет толькоПокупатель номер 57. - 2
В Россию магазин доставляет на следующий день, а в остальные страны — в течение 3 дней. В конце программы напишите инструкцию
ifс веткойelse: еслиcountryравно"Россия", выведитеДоставка завтра, иначе выведитеДоставка в течение 3 дней. Программа выведет:Покупатель номер 57 Доставка в течение 3 дней