Как произвести проверку входных данных в C++?

Существует энное количество лабораторных по программированию в универе, к каждой из них есть требование: проверка входных данных. Компилирую в MinGW Develover Studio, ввод-вывод производится через консоль. Есть ли какой-либо элегантный способ проверять input, если, например, пользователь вводит буквы/символы, в то время ввод производится в переменную типа int? Компилятор на такие вещи не реагирует, переменную не меняет, выводит либо старое целочисленное значение, либо мусор из памяти.
  • Вопрос задан
  • 16581 просмотр
Решения вопроса 1
AxisPod
@AxisPod
Возможностей проверить очень много:
1. Сохранить в строку и затем проверить, затем использовать atoi
2. Использовать scanf, указан выше
3. try/catch, указанный выше
4. cin

1й пункт хорош тем, что вы точно узнаете, что пользователь ввёл не число и его можно отругать, но по объему кода самый большой.

2й и 4й удобен простотой, но вы никогда не узнаете ввел ли пользователь 0 или просто набор символов.

3й видимо имелось ввиду cin, но для того, чтобы работали исключения их надо включить для данного потока cin.exceptions(ios::failbit);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@xandox
➜  /tmp  cat test.cpp
#include <iostream>

int main(int argc, char *argv[])
{
    int i;
    std::cin >> i;
    if (!std::cin) {
        std::cout << "bad integer" << std::endl;
    }
    return 0;
}
➜  /tmp  g++ test.cpp
➜  /tmp  ./a.out
1234
➜  /tmp  ./a.out
adsf
bad integer
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
ввод-вывод производится через консоль. Есть ли какой-либо элегантный способ проверять input, если, например, пользователь вводит буквы/символы

Вы бы ещё сказали, ввод-вывод через клавиатуру и монитор.
Если использовать scanf, то он возвращает, сколько полей реально отсканировано.
Т.е. scanf("%d", &i) вернёт 0 если ввести буквы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы