Оператор ветвления if в C++ — урок 6
Здравствуйте, дорогие друзья! Сложно представить себе полноценную программу, которая будет работать одинаково при любых обстоятельствах. Довольно часто приходится выбирать, между несколькими вариантами развития событий в зависимости от поступающих данных. Решением данной проблемы в C++ занимается оператор ветвления.
Что такое оператор ветвления?
Давайте представим, что мы пришли в магазин. У нас есть одна цель — купить товар. Однако есть одно ограничение. Его цена не должна превышать определенную сумму. В нашем случае условие следующие: our_money >= price
. Если это условие выполняется, то у нас все замечательно и мы счастливые направляемся к кассе. В противном случае нам придется искать более дешевый вариант данного товара.
Думаю у вас в голове уже сложилось понимание основных концептов ветвления в C++.
Оператор if
Чтобы указать условие при выполнении которого будет выполняться определенный код, тогда вам потребуется прибегнуть к следующей структуре:
- набрать ключевое слово
if
в своей программе; - после него, в круглых скобках, вы должны указать логическое выражение:
1if ( <ваше выражение> )
Здесь вместо<ваше выражение>
нужно указать требуемое условие, при котором будет выполняться требуемый нам код. - инструкции, которые будут выполнятся, мы оборачиваем в фигурные скобки сразу после круглых скобок с условием:
123if ( <условие> ) {<выполняемый код>}
Подобная структура, для обрамления кода, также используется в стандартной функции main (подробнее об этом можете почитать здесь).
Также можно вовсе пренебречь фигурными скобками. Однако это можно сделать только в том случае, если в качестве исполняемого кода будет указана лишь одна инструкция (или один оператор, в том числе другой оператор ветвления, который уже может содержать любое количество инструкций):
1 2 3 4 5 6 7 8 9 10 11 |
if (a > 7) // никаких скобок нет if (a < 9) { // вложенный оператор if cout << "A = 8" << endl; // выводим сообщение return 0; // завершаем работу программы } // или if (a < 7) cout << "Yes!" << endl; |
Код с вложенным оператором if
считается абсолютно корректным. Конечно, можно было использовать фигурные скобки в обоих случаях. Это никак не повлияло бы на работы программы.
Я же предпочитаю вариант со скобками, поскольку в случае написания реальных программ никогда не знаешь когда и куда придется добавить еще одну инструкцию. Также это способствует лучшему восприятию кода. Однако в наших уроках буду использовать сокращенный вариант для экономия места.
Поэтому, какой именно способ выбрать зависит только от вас.
Оператор else
Оператор else
выполняется в том случае, если условие указанное в if ложно. В таком случае будет проигнорирован код в блоке if
, и программа сражу перейдет к выполнению кода в блоке else
.
Данный оператор нужно прописывать после закрывающей фигурной скобки блока кода if
или после единственной инструкции оператора if:
1 2 3 4 5 6 7 8 9 10 11 12 |
if (a < b) { a = b; } else { b = a + 1; } // или так if (c < b) c = 7; else cout << "C >= b" << endl; |
Как видите, правила к коду внутри оператора else ровно такие же как и к коду внутри оператора if. Теперь давайте попробуем создать более сложную программу, которая будет использовать конструкцию ветвления.
Комбинация нескольких операторов
Довольно часто возникает необходимость в указании сразу нескольких вариантов действий. В таком случае нам не сможет помочь помочь всего один оператор ветвления if-else.
Вот небольшой пример комбинированной конструкции сразу с несколькими условиями:
1 2 3 4 5 6 7 8 |
if (err == 1) // начальное условие return 1; else if (err == 2) // второе условие return 2 else if (err == 3) // третье условие return 3; else // если ничто не подошло return 0; |
Теперь давайте более подробно разберем данную структуру:
- Сначала мы указываем начальное условие.
- Далее прописываем второй вариант при помощи
else if ( <второе условие> )
. - Подобных вариантов может быть сколь угодно много. Например, можно прописать условие для каждой буквы алфавита.
- В самом конце, после
else
, мы указыванием тот код, который должен выполнится в том случае, если ни одно из условий не соответствует нашим требованиям.
С помощью подобных условий можно создавать сложные варианты развития программы. Вы также можете вкладывать одни условия в другие, тем самым создавая еще более сложные и развернутые решение поставленных перед вами задач.
Пример
В качестве примера давайте напишем программу, которая будет эмулировать поведение продавца магазина. Для создания подобной программы давайте воспользуемся структурой if-else:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <iostream> #include <stdlib.h> using namespace std; int main() { setlocale(0, ""); // устанавливаем локаль bool b; // создаем переменную типа bool cout << "Хотите купить машину? "; // выводим сообщение cin >> b; // узнаем ответ покупателя if (b) { // проверяем, что ответил пользователь cout << "Хотите Audi? "; // опять сообщение cin >> b; // и снова узнаем ответ if (b) // очередная проверка cout << "Пройдемте со мной." << endl; else // предлагаем альтернативное решение cout << "Тогда вам в соседний отдел." << endl; } else cout << "Так зачем вы сюда пришли?" << endl; return 0; } |
Разбор кода
Здесь все должно быть вам понятным, однако давайте еще разок быстренько пробежимся по написанному нами коду:
- В строке 6 мы используем функцию, для вывода русских символов в консоль.
- В строке 14 начинается ветвление в C++. Тут у нас стандартный оператор ветвления if, а также оператор else.
- Внутри блока if у нас есть дополнительное условие.
Тест на тему «Оператор ветвления в C++»
Если эта надпись не исчезает долгое время, попробуйте обновить страницу. Этот тест использует javascript. Пожалуйста, влкючите javascript в вашем браузере.
Вот собственно и все. В качестве домашнего задания, попытайтесь создать собственного продовца, который сможет продать мороженное. Удачи!
Вы очень доступно все объясняете, очень жду новый урок. Спасибо что вы есть
Пожалуй, лучшее, что есть по данной теме….
Ждем продолжений
Все понятно, хорошее объяснение
Как задать ответ, для b = …
Можете уточнить вопрос?
Дмитрий, объясните пожалуйста почему в круглых скобках оператора if стоит просто b, и почему это работает? Моё предположение такое: если значение b не равно нулю (то-есть если у b есть значение) то программа работает
Именно так и есть! В программировании 0 == false, а все остальные значения большие 0 == true.
Для тех кто изучает С++ на маке — макоси — osx. Поставьте Xcode для версии вашей osx. И забудьте про него(пока). Создаете папку nameFolder в папке User(чтобы короче навигейтить). Открываете Terminal(в утилитах). Видите приглашение консоли User$. Идете по дереву каталога nameFolder командой cd nameFolder. Или обратно cd .. В папке nameFolder создаете файл myCppProg.cpp и пишете в нем код. Сохраняете в UTF-8 *.txt. В терминале компилируете командой make myCppProg. Cмотрите отличные пояснения об ошибках, если они есть. И из терминала запускаете готовый исполняемый файл командой ./myCppProg Good luck!
Сохраняете конечно не как myCppProg.txt а как myCppProg.cpp. Имеется ввиду в формате текстового файла в любом(почти) текстовом редакторе.
А почему остановились на 6-м уроке? Уроки то у вас хорошие, понятно объясняете. Жалко что забросили.
В скором планирую продолжить писать уроки.
Очень ждём!
Почему у меня вместо текста в программе непонятные наборы букв?
а можно ли поставить несколько условий? например
if (20 < c < 30){…
если да то как?
если нет то как заменить можно?
Можно. Это делается вот так:
if(20 < c && c < 30) { ...
В программе о продаже машины через директиву #include » подцеплен» заголовочный файл stdlib.h
У меня эта программа успешно и правильно работает без него. Почему?
Для работы использую Dev-C++