basic_istream& ignore( std::streamsize count = 1, int_type delim = Traits::eof() );
从输入流中取出并丢弃字符,直到遇到delim(丢弃的字符包含了delim)
ignore就如一个不合法的输入函数,从流中提取字符,直到下面三种情况中的一个就退出:
1、count个字符提取出来。当count等于std::numeric_limits<std::streamsize>::max()时这种情况就很难出现
2、遇到文件结束符,这种情况下会调用setstate(eofbit)
3、输入序列中的下一个字符是delim,通过Traits::eq_int_type(Traits::to_int_type(c), delim)。delimiter也会提取丢弃。当delim为Traits::eof()时,这种情况不会发生
#include <iostream>
#include <sstream>
#include <limits>
using namespace std;
int main()
{
istringstream input("1\n"
"some non-numeric input\n"
"2\n");
for (; ;) {
int n;
input >> n;
if (input.eof() || input.bad()) {
break;
} else if (input.fail()) {
input.clear();
input.ignore(numeric_limits<streamsize>::max(), '\n');
} else {
cout << n << '\n';
}
}
return 0;
}
输出为:
1
2