Как ловить ошибку и выводить её?

как ловить ошибку с помощью try,catch если пользователь ввел в год(int) какой-либо текст(char,string) и выводить что-либо.

int year;
cin >> year;

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

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

Я как-то, фрилансируя :), для студентов набросал такой способ чтения с обработкой ошибок, смотрите, может, пригодится :)

int inputInt(const char * prompt, int m = INT_MIN, int M = INT_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::streamsize>::max(),'\n');
    }
}

a = inputInt("Введите размер массива",1,10);
→ Ссылка
Автор решения: user7860670
#include <iostream>

int main()
{
    ::std::cin.exceptions(::std::ios_base::failbit bitor ::std::ios_base::badbit bitor ::std::ios_base::eofbit);
    try
    {
        int year{};
        ::std::cin >> year;
        ::std::cout << "success";
    }
    catch (...)
    {
        ::std::cout << "error";
    }
}

https://godbolt.org/z/1ETs1Y

→ Ссылка
Автор решения: Павел Ериков

А если вам не нравится year = 0 (например если переменная year может принимать такое значение), тогда вот пример отлова ошибки:

int year;
cin >> year;
if (cin.fail()) {
    cout << "Ошибка ввода!" << endl;
} else
    cout << year << endl;

Хочу заметить, что если пользователь введет 123world, то ошибки не будет, а в переменную year будет записано 123

→ Ссылка