Проверка ввода цифр

220
29 сентября 2017, 18:56

Выполнял задание, встал перед вопросом, все выполнено, но необходима проверка ввода. Получилось следующее

if ((std::cin >> variant).good()) break;
std::cin.clear();
cin.ignore(std::numeric_limits<std::size_t>::max(), '\n');

Так проверялось после каждого считывания переменных, кода вышло много, как можно объеденить это в функцию, но чтобы после неудавшейся проверки я по новой получал сообщение c просьбой повторить ввод координаты.

x=

Так считываю

cout << "Пожалуйста введите координаты первой точки:" << endl << "x=";
cin >> p1.x;

Пробовал только так, не нравится, да и значение получал внутри функции.

double func()
{
    double x;
    for (;;) {
        cout << ">" << std::flush;
        if ((std::cin >> x).good()) break;
        std::cin.clear();
        cin.ignore(std::numeric_limits<std::size_t>::max(), '\n');
    }return x;
}

К плюсам не привык, не ругайте.

Answer 1

Например, добавьте в параметры функции текст приглашения - что-то вроде

int inputInt(const char * prompt, 
             int m = std::numeric_limits<std::size_t>::min(), 
             int M = std::numeric_limits<std::size_t>::max())
{
    int N;
    for (;;) {
        std::cout << prompt << " (целое от " << m << " до " << M << "): " << std::flush;
        if ((std::cin >> N).good() && (m <= N) && (N <= M)) return N;
        if (std::cin.fail()) {
            std::cin.clear();
            std::cout << "Неверный ввод, повторите.\n";
        } else {
            std::cout << "Число вне допустимого диапазона значений. Повторите ввод.\n";
        }
        std::cin.ignore(std::numeric_limits<std::size_t>::max(),'\n');
    }
}

Ну, и вызываете как

int n = inputInt("Введите число студентов",0,50);

(я навесил еще и проверку диапазона).

READ ALSO
Замена не экспортируемой функции C++

Замена не экспортируемой функции C++

Дано: Главный mainexe файл, вызывающий библиотеку libs

221
Выравнивание структур вручную

Выравнивание структур вручную

Допустим вам требуется вручную выровнять все поля структуры по 4 байтаВыглядит это примерно так:

282
Выборка jq и Angular

Выборка jq и Angular

У меня есть таблица, данные там формируются с помощью ng-repeat

282