y0ung_chuck Ответов: 2

(Проверка ввода для нескольких cin) есть ли какой-нибудь способ сжать этот код?


Я хочу добавить в эту программу функцию проверки входных данных,в которой пользователь присваивает значения 4 переменным. В настоящее время у меня есть оператор if после каждого запроса для пользователя ввести значение. Должен ли я включать этот код после каждого запроса или есть способ упростить это? Не срочно, но любопытно.
int main()
{
	double ux, uy, vx, vy, angle_rad, angle_deg, angle;
	string error = "Error: please enter valid components for the vectors.";
	cout << "Please enter the x-component of vector u: ";
	cin >> ux;
	if (cin.fail())
	{
		cout << endl << error << endl << endl;
		return 1;
	}
	cout << endl << "Please enter the y-component of vector u: ";
	cin >> uy;
	if (cin.fail())
	{
		cout << endl << error << endl << endl;
		return 1;
	}
	cout << endl << "Please enter the x-component of vector v: ";
	cin >> vx;
	if (cin.fail())
	{
		cout << endl << error << endl << endl;
		return 1;
	}
	cout << endl << "Please enter the y-component of vector v: ";
	cin >> vy;
	if (cin.fail())
	{
		cout << endl << error << endl << endl;
		return 1;
	}


Что я уже пробовал:

Я попытался поместить только одну строковую ошибку в конце всех приглашений, однако, как только будет получен неверный ввод, он все равно покажет другие дисплеи cout перед отображением Строковой ошибки.

Peter_in_2780

Очень похоже на случай с подпрограммой.

2 Ответов

Рейтинг:
2

CPallini

Также обратите внимание, что есть место для некоторых OOP в вашем сценарии. Вы можете определить двумерный векторный класс и перегрузить для него входные (и, возможно, выходные) операторы.


Рейтинг:
1

Jochen Arndt

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

#include <float.h>

bool getDouble(double &val, const char *msg, double min = DBL_MIN, double max = DBL_MAX)
{
    bool bValid = true;
    cout << endl << msg;
    cin >> val;
    if (cin.fail())
    {
        cout << endl << "Error: please enter valid components for the vectors." << endl << endl;
        bValid = false;
    }
    else if (val < min)
    {
        cout << endl << "Error: Value is too small" << endl << endl;
        bValid = false;
    }
    else if (val > max)
    {
        cout << endl << "Error: Value is too large" << endl << endl;
        bValid = false;
    }
    return bValid;
}
</float.h>

Затем вызовите эту функцию для каждого входа:
if (!getDouble(ux, "Please enter the x-component of vector u: "))
    return 1;
if (!getDouble(uy, "Please enter the y-component of vector u: "))
    return 1;
// ...


CPallini

5.