Как сделать так чтобы cin не ломался?

Рейтинг: 0Ответов: 1Опубликовано: 15.04.2015

собственно есть примерно такая конструкция

int k = 0;    
while(1)
    {
        if(k == 0)
        {
            cin >> k;
        }
        if(k == 1)
        {
            ///что то делаем
            k = 0;
        }
        if else(k == 19)
        {
            ///что то делаем
            k = 0;
        }
        else
        {   
            k = 0;
            return 0;
        }
    }

Написал простенький пример, чтобы было легче показать: Если ввести все кроме чисел то программа зациклится и cin сломается, подскажите как правильно выкрутиться из такой ситуации

Ответы

▲ 5Принят

Вы должны проверять результат при чтении.

Например, так:

while (!(cin >> cmd))
{
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cout << "???" << endl;
}

Это для случая, когда ввод не может быть перенаправлен, иначе надо проверять cin.eof() (и может быть cin.bad()) по отдельности.