练习8.1--8.2代码:
#include <iostream>
using namespace::std;
istream& in_out(istream &in)
{
int temp;
while (1) {
cin >> temp;
/* 到达文件结尾 */
if (in.eof()) {
cout << "EOF" << endl;
break;
}
/* 系统级错误 */
if (in.bad())
throw runtime_error("iostream error!");
/* 数据错误,清除错误标志,重新输入 */
if (in.fail()) {
cout << "format error, enter again: " << endl;
in.clear();
in.ignore(100, '\n');
continue;
}
cout << temp << endl;
}
return in;
}
int main(int argc, char *argv[])
{
cout << "please enter data: " << endl;
in_out(cin);
return 0;
}
in.ignore(100, '\n');该语句的作用是清除回车键以前的缓冲区内容,比如键入了一个错误数据,in.clear()仅仅是清除了错误标志,而错误数据还在数据流中,如果没有ignore操作,下一次循环还将判断流出错,只有将其清除掉后续才能再次输入数据。
练习8.3
终止条件:发生系统级错误(badbit),输入数据与预期不符(failbit),到达文件结尾(eofbit)。