有关istream的问题
看C++ primer中的IO部分,有这样一道习题。
编写一个函数,其唯一的形参和返回值都是istream&类型。该函数应一直读取流知道到达文件结束符为止,还应将读到的内容输出到标准输出中。最后,重设流使之有效,并返回该流。并通过cin为实参实现调用来测试上题编写的函数。
答案给的源代码如下:
#include<iostream>
using namespace std;
istream& r_w(istream& s)
{
int ival;
while(s >> ival && !s.eof())
{
if(s.fail())
{
cerr<< "bad data, try again";
s.clear(istream::failbit);
continue;
}
if(s.bad())
throw runtime_error("IO stream corrupted");
cout<<ival<<" ";
}
s.clear();
return s;
}
int main()
{
double dval;
r_w(cin);
cin >> dval;
cout << dval;
return 0;
}
意思就是读入int的值,如果正常就继续读,如果不是int类型的,则会发现s.fail()为真,这时clear一下错误位,然后continue,继续读下一个字符。
而我这个程序跑起来以后,如果遇上形如
"1s2"
这样的字符输入,就会发现当函数遇到s的时候,直接跳出while,不再分析下面的了。意思应该是s>>ival这个为假。
请问一下,是这个答案给错了,还是我的理解有什么问题?谢谢!