Как мне убрать повторения ненужного кода внутри условия?

100
31 мая 2021, 00:30

Все привет :) будьте внимательны пожалуйста

У меня в коде есть много разных условий, каждое условие уникально и имеет уникальный код.

Код который внизу создан для примера, он работает правильно!

            int a = 0;
            /* .... */
            if (a == 0) // здесь будет код, очень длинный, число это просто пример!!!
            {
                cout << a << "\n" << endl;
                a++; // код который постоянно повторяется a++;
            }
            if (a == 1)
            {
                cout << a << "\n" << endl;
                a++; // 
            }
            if (a == 2) {
                cout << a << "\n" << endl;
                a++;
            }
            if (a == 3) {
                cout << a << "\n" << endl;
                a++;    
            }
            // ответ получаем 1, 2, 3

как видите a++; постоянно повторяется Я бы хотел написать это один раз для всех условий, но не знаю как.

Этот вариант не подходит как видите он выполняется только один раз.

            int a = 0;
            /* .... */
            if (a == 0 ||
                a == 1 ||
                a == 2 ||
                a == 3 ||
                a == 4) {
                cout << a << "\n" << endl;
                a++;
            }
            // ответ только один это 0 а мне нужно типа такой ответ 0, 1, 2, 3 как будто каждое условия if было выполнено.
Answer 1

Ну сделайте проверку в отдельной функции:

#include <iostream>
int main()
{
    auto a{0};
    auto const checker
    {
        [&](auto const condition) 
        {
            if(condition)
            {
                ::std::cout << a << ::std::endl;
                a++; // код который постоянно повторяется a++;
            }
        }
    };
    checker(a == 0);
    checker(a == 1);
    checker(a == 2);
    checker(a == 3);
}

Вариант без лямбды:

struct ChainCheck
{
    int & a;
    auto operator ()(bool const condition) const
    {
        if(condition)
        {
            ::std::cout << a << ::std::endl;
            a++; // код который постоянно повторяется a++;
        }
        return *this;
    }
};
int main()
{
    auto a{0};
    ChainCheck{a}(a == 0)(a == 1)(a == 2)(a == 3);
}
READ ALSO
Можно ли сделать модификацию функции Эйлера?

Можно ли сделать модификацию функции Эйлера?

Как известно, функция Эйлера ищет количество взаимно простых чисел с N на отрезке [1N]

95
QMediaPlayer / задержка перед воспроизведением

QMediaPlayer / задержка перед воспроизведением

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

107
Как вызвать 2 раза break; внутри switch?

Как вызвать 2 раза break; внутри switch?

Не могу красиво выйти из цикла используя break внутри switch, успевает сработать только один разпробовал еще return; но он выкидывает в такую далину...

104
При работе перепоняется vector: &ldquo;vector subscript out of range&rdquo;

При работе перепоняется vector: “vector subscript out of range”

Около месяца изучаю C++, несколько дней пытаюсь отладить кодОшибка, наверное, очевидная для бывалых, всё никак не находится

89