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/
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 здесь выполняют?