Рубріки: ОсновыТеория

Конструкция ветвления в C++ и операторы if/else: правильное применение

Андрей Галадей

Любая компьютерная программа подразумевает ветвление. Это ситуация, когда нужно выбрать тот или иной вариант в зависимости от условий. Например, если некий результат вычислений меньше 100 — нужно вывести сообщение «Результат не дотягивает до сотни». Если больше — выводится «Результат превышает сотню и потрясающе выглядит».

Для этого в C++ есть так называемые операторы ветвления — особые команды, которые показывают компилятору, что можно выбирать из тех или иных вариантов. Сегодня мы поговорим о том, какие есть операторы ветвления в C++, как они функционируют, также приведем примеры их использования.

Содержание

Конструкция ветвления в C++
Использование нескольких операций в ветвлениях if/else
Вложенные ветвления if/else
Неявное указание блоков if/else
Нулевые стейтменты
Вывод

Конструкция ветвления в C++. Операторы условного ветвления if/else

Сфера применения операторов ветвления в C++ и других языках программирования крайне широка. С их помощью реализуется очень много задач, они позволяют изучить логику программирования и понять, как это все работает. Грубо говоря, эти операторы универсальны по своему значению и применяются везде. 

Нажали одну кнопку — система выдала определенный результат на основании данных на входе. Нажали другую — система выдала иной результат на основании тех же входных данных. Не нажали, но прошло определенное время по таймеру — будет третий результат. 

Само собой, это умозрительный пример ветвления, но, надеюсь, идею вы поняли. Давайте перейдем к практической стороне реализации. 

Блок-схема простейшего варианта ветвления выглядит следующим образом:

Скриншот с bookflow.ru

Здесь все просто и понятно: если выражение принимает положительное значение — выполняется одна инструкция. Отрицательное — другая. В качестве наглядного примера возьмем вот такую небольшую программу на С++. В ней надо ввести любое произвольное число, которое может быть меньше 100, или же больше/равно 100. 

#include 
using namespace std;
int main()
{
    setlocale(0, "");
    double num;
    cout << "Введите произвольное число: "; cin >> num;
    if (num < 100) { // Если введенное число меньше 100.
        cout << "Это число меньше 100." << endl;
    } else { // иначе
        cout << "Это число больше либо равно 100." << endl;
    }
    return 0;
}

Здесь, как видим, реализован простейший вариант — проверка идет по принципу больше/меньше. Помимо этого, никаких проверок. Ниже мы рассмотрим вариант, когда программа будет различать более точные вводные данные — меньше, больше или равно.

Само собой, эта простейшая программа не включает проверку корректности символов — туда можно ввести любые данные — цифры, буквы, символы из ASCII и так далее. Однако корректные результаты получить можно будет только на цифрах. 

Использование нескольких операций в ветвлениях if/else

Бывает так, что нужно выбрать не из двух, а из большего числа вариантов — трех и так далее.  Давайте посмотрим, как это можно сделать:

#include 
using namespace std;
int main()
{
    setlocale(0, "");
    double num;
    cout << "Введите произвольное число: "; cin >> num;
    if (num < 100) { // Если введенное число меньше 100.
        cout << "Это число меньше 100." << endl;
    } else if (num == 100) { // иначе если число строго равно 100
        cout << "Это число равно 100." << endl;
    } else { // иначе
        cout << "Это число больше 100." << endl;
    }
    return 0;
}

Мы добавили новое условие, которое позволяет уточнить результат — число строго больше 100 или строго равно ему. Как видите, ничего сложного. Это также называется связыванием стейтментов. 

Вложенные ветвления if/else

Еще один способ сломать себе мозг осуществить выбор в программе — вложенные ветвления. Суть понятна из названия — внутри одной пары if/else есть другая или другие пары. Выглядит это логически примерно так:


Скриншот с bookflow.ru

Строго говоря, это ничем не отличается от обычного ветвления, разве что только для выполнения внешнего условия сначала должно выполниться внутреннее (вложенное). 

Пример кода:

#include <iostream>
int main()
{
    std::cout << "Введите число: ";
    int a;
    std::cin >> a;
     if (a > 15)
    {
        if (a < 25)
            std::cout << a << " находится между 15 и 25\n";
        else // относится к внутреннему оператору if 
            std::cout << a << " больше или равно 25\n";
    }
     return 0;
}

И вот здесь надо быть внимательным, поскольку количество if и else должно быть одинаковым — как и фигурных скобок. Иначе говоря, оператор else всегда относится только к последнему незакрытому оператору if в том же блоке. 

Для улучшения читабельности кода желательно использовать те самые фигурные скобки, чтобы не запутаться. Они не окажут влияния на работу программы или компилятора, однако помогут визуально улучшить код сам по себе. 

Неявное указание блоков if/else

Бывает так, что разработчик не указывает фигурные скобки для блока стейтментов if или else. Однако некоторые компиляторы C++ позволяют сделать это и без ручного труда. То есть налицо некоторая автоматизация процесса (которой, впрочем, лучше не злоупотреблять).

Таким образом, блок кода…

if (условие)
    стейтмент_1
else
    стейтмент_2

…превращается в такую конструкцию:

if (условие)
{
    стейтмент_1
}
else
{
    стейтмент_2
}

С точки зрения компилятора ничего не поменялось — логика та же самая, только изменилось написание. Это можно сравнить с синонимами в естественном языке — допустимо, но не обязательно, и не влияет на восприятие в целом. 

Нулевые стейтменты

Помимо этого, в C++ можно использовать null-стейтменты (нулевые). Суть их состоит в том, что они заменяют основную часть оператора if. Для их объявления можно использовать точку с запятой — ; — что позволяет также визуально указать на явное применение нулевого стейтмента.

Пример неправильного кода:

if (a == 0);
    a = 1;

Здесь мы закрыли оператор if с помощью точки с запятой, то есть фактически дополнили его нулевым стейтментом. В этом случае программа будет выполняться неверно, поскольку проверка, равна ли переменная a нулю, уже не проводится. Тут переменная получит значение 1 в любом случае.

А вот правильный код:

if (a == 0)
    a = 1;

В этом случае только если a равно нулю, произойдет присваивание нового значения 1. Поэтому, будьте внимательны, чтобы не допустить таких детских ошибок. 

Вывод

В статье мы рассмотрели самые простые варианты ветвления и только для одного языка, хотя алгоритм работает аналогично и в других — разница только в синтаксисе. Конечно, есть и другие операторы ветвления даже в самом C++ — тот же весьма мощный по своим возможностям оператор switch или «переключатель». Его работу можно увидеть в так называемых «радиокнопках» в интерфейсе многих программ. Его специфика: он удобен при обработке множества опций выбора, там можно выбрать только один вариант.

И да, это тоже можно реализовать с помощью if/else, однако такой стиль программирования довольно громоздкий и не приветствуется. 

К слову, то же самое, что было в статье, но более подробно, есть в этом тематическом видео:

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023