//********************************* //习题8.3 8.4 //********************************* #include <iostream> using namespace std; std::istream& get(std::istream &in) { int ival; while (in>>ival,!in.eof())//注意逗号表达式,前一个的返回值被忽略了 { if (in.bad())//出现系统级故障 { throw std::runtime_error("IO stream corrupted"); } if (in.fail())//出现可恢复错误 { std::cerr<<"bad data, try again/n"; in.clear();//恢复流 in.ignore(200,' ');//跳过类型非法的输入项 continue; } //读入正常 std::cout<<ival<<" "; } in.clear(); return in; } //测试函数 习题8.4 int main() { double dval; //注意运行时刚开始的一切都在这个函数中执行 get(cin); //当键入ctrl+z时从get(cin)跳出,下面的语句表明这个流还能使用 cin>>dval; //重新使用恢复后的流 cout<<dval<<endl; return 0; }