题目:编写函数,接受一个istream&参数,返回值类型也是istream&。此函数须从给定流中读取数据,直到遇到文件结束标志时停止。它将读取的数据打印在标准输出上。完成这些操作后,在返回流之前,对流进行复位,使其处于有效状态。
1 #include <iostream> 2 using namespace std; 3 4 istream& fun(istream& in) 5 { 6 int n; 7 while (in >> n, !in.eof()) { // 读取数据,直到遇到文件结束符 8 if (in.bad()) { // 系统级别故障,不可恢复,流不能继续使用,只能退出 9 throw runtime_error("IO stream corrupted"); 10 } 11 if (in.fail()) { // 错误,但可恢复 12 cerr << "bad data, try again" << endl; 13 in.clear(istream::goodbit); 14 in.ignore(1, ' '); // 忽略前面的错误输入 15 continue; 16 } 17 cout << n << " from the fun" << endl; 18 } 19 in.clear(); 20 return in; 21 } 22 23 int main() 24 { 25 fun(cin); 26 int v = -1; 27 cin >> v; 28 cout << "v = " << v << endl; 29 return 0; 30 }