C++输入流状态变化的一点小细节

来源:互联网 发布:微软雅黑blod mac 编辑:程序博客网 时间:2024/06/06 16:55
今天写了这么一段代码来实验输入流状态的变更:
std::istream& read(std::istream& is){int i;while (!is.fail()){is >> i;}is.clear();is.ignore();return is;}void main(){int a;read(cin);if(!cin.bad()) cout << "bad"<< endl;while (cin >> a){<span style="white-space:pre"></span>}}


对int类型的变量输入字符,当输入流处于错误时,
clear()函数只能复位输入流的状态,而缓冲区依旧有错误的输入,
这个时候需要调用ignore()函数来清空缓冲区,无参时默认清空一位,
如果不用ignore()函数则将导致在main函数中输入流直接读取了缓冲区之前保留的错误输入,
导致再度发生错误,因而一定要将缓冲区所有错误输入清空。




另:ignore(numeric_limits<std::streamsize>::max());清空所有缓存。
0 0