НЕОБХОДИМО УПРОСТИТЬ КОД, проверка ввода пользователя. Точки вершин треугольника

Есть 3 вершины треугольника, соответственно 6 точек. Мой код делает следующее - обрабатывает ввод пользователя и проверяет его, я подумал а есть ли возможность как это вынести в функцию? Я новичок. P.S. Извиняюсь что на украинском, надеюсь это вас не затруднит. Код:

double x_1, x_2, x_3, y_1, y_2, y_3;
        cout << "Введіть координати трикутника";
        while (true)
        {
            cout << "\nx1: ";
            cin >> x_1;
            if (cin.fail())
            {
                cin.clear();
                cin.ignore(32767, '\n');
                cout << "\nНекоректне значення. Спробуйте ще раз\n";
            }
            else break;
        }

        while (true)
        {
            cout << "\ny1: ";
            cin >> y_1;
            if (cin.fail())
            {
                cin.clear();
                cin.ignore(32767, '\n');
                cout << "\nНекоректне значення. Спробуйте ще раз\n";
            }
            else break;
        }

        while (true)
        {
            cout << "\nx2: ";
            cin >> x_2;
            if (cin.fail())
            {
                cin.clear();
                cin.ignore(32767, '\n');
                cout << "\nНекоректне значення. Спробуйте ще раз\n";
            }
            else break;
        }

        while (true)
        {
            cout << "\ny2: ";
            cin >> y_2;
            if (cin.fail())
            {
                cin.clear();
                cin.ignore(32767, '\n');
                cout << "\nНекоректне значення. Спробуйте ще раз\n";
            }
            else break;
        }

        while (true)
        {
            cout << "\nx3: ";
            cin >> x_3;
            if (cin.fail())
            {
                cin.clear();
                cin.ignore(32767, '\n');
                cout << "\nНекоректне значення. Спробуйте ще раз\n";
            }
            else break;
        }

        while (true)
        {
            cout << "\ny3: ";
            cin >> y_3;
            if (cin.fail())
            {
                cin.clear();
                cin.ignore(32767, '\n');
                cout << "\nНекоректне значення. Спробуйте ще раз\n";
            }
            else break;
        }

Ответы (1 шт):

Автор решения: KoVadim

У Вас есть один и тот же повторяющийся кусок, отличается он только переменной. Значит можно вынести в функцию, а возвращать функция будет собственно само значение.

doube get_user_input(const char* prompt) {
    double x;
    while (true)
    {
        cout << "\n" << prompt << ": ";
        cin >> x;
        if (cin.fail())
        {
            cin.clear();
            cin.ignore(32767, '\n');
            cout << "\nНекоректне значення. Спробуйте ще раз\n";
            continue;
        }
        
        return x;
    }
}

если я ничего не напутал, то теперь можно прям так вводить

double x_1 = get_user_input("x_1");
double x_2 = get_user_input("x_2");
double x_3 = get_user_input("x_3");

(ну или сколько Вам нужно). а как параметр функции передается подсказка.

Конечно, хорошо бы предусмотреть какой-то вариант для пользователя "отказаться", но можно и ctrl+C нажать.

→ Ссылка