Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Нужно добавить (до цикла):
Код: Выделить весь код
std::cin.exceptions(std::ios::badbit|std::ios::failbit);
По умолчанию все исключения отлавливаются, если они не разрешены. Это сделано для совместимости.
Предлагаю без исключений, в простых случаях это - лучший вариант
Код: Выделить весь код
do {
   ...
} while(!(std::cin >> value));
Или по-современному:
Код: Выделить весь код
struct subtask_t
{
    int fold_exceptions;
    int val;

    subtask_t() :
          fold_exceptions(std::cin.exceptions()),
          val()
    {
         std::cin.exceptions(std::ios::badbit|std::ios::failbit);
    }
    
     ~subtask_t()
    {
         std::cin.exceptions(fold_exceptions);
    }

    void operator()
    {
          for(;;)
          {
                try {
                   std::cin >> val;
                   return;
               }
               catch(std::ios::failure&)
               {
               }
          }
    }
}

Отправлено: 21:04, 04-05-2006 | #3