Очистить ячейку в переполнении стека

Возможный дубликат:
Почему это чтение 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?

4

Решение

cin.clear() не очищает буфер, он сбрасывает флаги ошибок в потоке.
Затем вам нужно позвонить cin.ignore

istream&  ignore ( streamsize n = 1, int delim = EOF );

Извлекает символы из последовательности ввода и удаляет их.

Извлечение заканчивается, когда n символов были извлечены и
отбрасывается или когда найден разделитель символа, в зависимости от того, что произойдет раньше.
В последнем случае сам символ-разделитель также извлекается.


cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

Числовые ограничения

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector