std::istream& get(std::istream& input){ int ival; while(input>>ival,!input.eof()){//遇到文件结束符之前,一直读取流 if(input.bad()) throw std::runtime_error("Istream corrupted!");//出现了系统故障,抛出异常 if(input.fail()) { //遇到接恢复错误 std::cerr<<"bad data,try again"; //提示用户 input.clear();//恢复流 input.ignore(100,' '); //跳过类型非法的输入 continue;//继续读取流 } std::cout<<ival<<" "; } input.clear();//恢复流 return input; } int main() { int ival; get(cin); cin>>ival; cout<<ival<<endl; system("pause"); return 0; }
input.clear();那里若写成input.clear(istream::failbit);会导致死循环。
c++ primer 习题8.3
最新推荐文章于 2015-11-28 14:41:51 发布