Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

c++. cin.ignore и cin.clear

Алекс Андр Профи (543), закрыт 11 лет назад
cout<<"Введите положительное ненулевое число\nЧисло: ";
int numb;
for( ;; )
{
if((cin>>numb,cin.good())&&(numb>0))
{
cin.ignore(100,'\n');
break;
}
else
{
cin.clear(ios_base::goodbit);
cin.ignore(100,'\n');
cout<<"Повторите ввод: ";

Что cin.ignore и cin.clear здесь выполняют?
Лучший ответ
bmx666 Гуру (3752) 11 лет назад
istream& istream::ignore(streamsize n = 1, int delim = EOF);

определенная в классе istream, извлекает из потока символы и отбрасывает их. Причем она так поступает либо с n символами, либо со всеми символами, пока в потоке не встретится символ, заданный параметром delim.

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

void ios::clear(iostate state = goodbit);

Эта функция восстанавливает поток, если он по какой-либо причине оказался в ошибочном состоянии. Например, из потока пытались прочитать число, а там в это время находились буквы. В этом случае, поток переводится в состояние отказа, и дальнейшие операции с ним неосуществимы. В том числе и cin.get(). Функция же clear() “очищает” состояние потока, делая его вновь веселым и работоспособным.
Источник: cppstudy.wordpress.com/2009/03/27/cin-get-and-co/
Алекс АндрПрофи (543) 11 лет назад
Благодарствую!
Остальные ответы
Prototupe Гуру (2757) 11 лет назад
cin.ignore(100,'\n'); тут вроде в обьект передается два параметра.
флаг ios_base :: goodbit имеет значение ноль, указывает на отсутствие каких-либо флагов ошибки
Похожие вопросы