Форум программистов, компьютерный форум CyberForum.ru

Обработка ошибок ввода из потока cin - C++

Восстановить пароль Регистрация
 
shilko2013
 Аватар для shilko2013
239 / 216 / 116
Регистрация: 02.04.2016
Сообщений: 822
Завершенные тесты: 1
02.07.2016, 14:29     Обработка ошибок ввода из потока cin #1
Доброго времени суток всем!
Помогите пожалуйста разобраться.
После ввода буквы например, то есть когда поток ломается, пытаюсь его починить, но программа зацикливается и бесконечно пишет "Повторите ввод, что-то пошло не так!". Как починить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Point {
        int x, y;
    };
vector<Point> v(7);
for (int i = 0; i < 7; i++) {
        cout << i + 1 << "ая пара: ";
        cin >> v[i].x >> v[i].y;
        if (!cin) {
            cout << "Повторите ввод, что-то пошло не так!" << endl;
            cin.clear();
            cin.sync();
            i--;
        }
    }
Добавлено через 2 минуты
Спасибо всем разобрался.
Надо было буфер почистить.
C++
1
while (cin.get() != '\n');
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2016, 14:29     Обработка ошибок ввода из потока cin
Посмотрите здесь:

C++ Возобновление потока cin.
Как проверить на пустоту буфер потока cin ? C++
Visual C++ 2012. Консоль. scanf(). Обработка ошибок ввода C++
Задача преобразования числа в предложение | обработка потока ввода C++
C++ Cin, чтение с конца полученного потока
Работа с cin при считывании с потока ввода C++
C++ Чтение числа из потока и обработка ошибок
Проверка ошибок при вводе (cin) C++
Обработка ошибок ввода C++
Обработка потока ввода C++
C++ Детали относительно входного потока cin
C++ Использование потока cin для ввода символов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12080 / 6941 / 782
Регистрация: 27.09.2012
Сообщений: 17,227
Записей в блоге: 2
Завершенные тесты: 1
02.07.2016, 16:08     Обработка ошибок ввода из потока cin #2
Цитата Сообщение от shilko2013 Посмотреть сообщение
C++
1
2
cin.clear();
cin.sync();
кто научил так делать?
Поведение sync зависит от реализации.
Накропал по-быстрому, не знаю,
будет ли работать так, как ожидается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
if(cin.eof()){
   clear();
}else{
   if(cin.bad()){
      std::cerr << "Усё, доигрались\n";
   }else{
      if(cin.fail()){
          cin.clear();
          std::getline(cin, str);//что-то подобное
      }
   }
}
shilko2013
 Аватар для shilko2013
239 / 216 / 116
Регистрация: 02.04.2016
Сообщений: 822
Завершенные тесты: 1
04.07.2016, 16:15  [ТС]     Обработка ошибок ввода из потока cin #3
Croessmah, Я разобрался, до пробела надо было читать так
C++
1
2
3
char a;
while (a != ' ')
a = cin.get();
Yandex
Объявления
04.07.2016, 16:15     Обработка ошибок ввода из потока cin
Ответ Создать тему
Опции темы

Текущее время: 04:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru