Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Очистка буфера ввода


Автор: zmaximka 30.3.2011, 15:42
Подскажите пожалуйста более корректный вариант этого кода.
Код

if(!cin.good())
{
cin.clear(); 
while (cin.get() != '\n') continue; 
}


пробовал заменить на
Код

if(!cin.good())
{
cin.clear(); 
cin.sync();
}

но это вариант работает не правильно 

Автор: bsa 30.3.2011, 17:32
zmaximkaТвой код в случае ошибки в std::cin, сбрасывает флаг ошибки, и пропускается одну строку. Можно сделать через getline, но выгодней просто модифицировать твой код:
Код
if (!std::cin) {
   std::cin.clear();
   while(std::cin.get() != '\n');
}

Автор: zmaximka 30.3.2011, 19:09
Цитата(bsa @ 30.3.2011,  17:32)
zmaximkaТвой код в случае ошибки в std::cin, сбрасывает флаг ошибки, и пропускается одну строку. Можно сделать через getline, но выгодней просто модифицировать твой код:
Код
if (!std::cin) {
   std::cin.clear();
   while(std::cin.get() != '\n');
}

Правильно я понял, что кроме как посимвольным чтением опустошить буфер ввода никак нельзя?

Автор: bsa 30.3.2011, 20:09
zmaximka, можно. std::cin.ignore(). Но ты же убирал только одну строку!

Автор: zmaximka 30.3.2011, 20:13
а если мы не знаем сколько введет пользователь, сколько символов мы укажем в ignore?

Автор: bsa 31.3.2011, 14:28
Цитата(zmaximka @  30.3.2011,  20:13 Найти цитируемый пост)
а если мы не знаем сколько введет пользователь, сколько символов мы укажем в ignore?

А если мы прочитать http://cplusplus.com/reference/iostream/istream/gcount/?

Автор: zmaximka 31.3.2011, 15:57
Может быть я что-то не так понял, но этот вариант у меня не работает. gcount() возвращает 0
Код

if(!cin.good())
{
    cin.clear(); 
    cin.ignore(cin.gcount()); 
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)