Возможный дубликат:
Почему это чтение cin заклинило?
Я перегрузил оператор istream (istream &operator>>...
) и он принимает в точке формата:
(<x-coordinate>,<y-coordinate>)
Я хочу проверить это несколько раз (10), и поэтому написал:
for (int i = 0; i < 10; i++) {
cin >> a;
if (!cin.fail()) { cout << a << endl; }
else { cout << "Invalid input!" << endl; cin.clear(); }
}
РЕДАКТИРОВАТЬ:
Теперь у меня есть следующий код:
for (int i = 0; i < 10; i++) {
cin >> a;
if (!cin.fail()) { cout << a << endl; }
else {
cout << "Invalid input!" << endl; cin.clear();
while (!cin.eof()) { cin.ignore(); } cin.ignore();
}
}
Игнорирование было предложено Ктулху. Однако проблема в том, что cin по-прежнему выводит «Неверный ввод!» после выполнения кода выше:
(3,3) <-- input
(3,3) <-- output
Invalid output! <-- second output
Есть ли способ, которым я могу понять, что находится в Cin?
cin.clear()
не очищает буфер, он сбрасывает флаги ошибок в потоке.
Затем вам нужно позвонить cin.ignore
istream& ignore ( streamsize n = 1, int delim = EOF );
Извлекает символы из последовательности ввода и удаляет их.
Извлечение заканчивается, когда n символов были извлечены и
отбрасывается или когда найден разделитель символа, в зависимости от того, что произойдет раньше.
В последнем случае сам символ-разделитель также извлекается.
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Других решений пока нет …