这是c++ primer上的一道题,我以前对文件操作都是用C语言的方法进行,对这个流基本上没个概念,甚至都读不懂题

请各路高手帮我写个程序框架,或者分析也行,叫我干什么,函数是写成下面这样吗?
istream& process_input(istream& is);
我就有点奇怪既然形参是引用了,还返回它干什么,似乎没有必要
请大家不吝赐教,谢谢

感谢二楼三楼的回复,我也是像三楼这么写的。。用vector<string>保存,不过打不出来。。,
看来我的理解还是有点靠谱的,谢谢你们
下面是我自己的函数,大家帮我看看哪出错了,打不出来
istream &process_input(istream& is)
{
string str;
vector<string> svec;
while (is>>str,!is.eof())
{
cout<<"正在进行读入操作,请稍候..."<<endl;
if (is.bad())
{
throw runtime_error("该文件已经损坏,不可读取!");
}
if (is.fail())
{
cerr<<"有一个错,重试"<<ends;
is.clear();
continue;
}
svec.push_back(str);
}
cout<<"已经读入文件,现在将其打印出来"<<endl;
for (std::vector<string>::const_iterator it=svec.begin();it!=svec.end();++it)
{
cout<<*it<<" ";
}
cout<<endl;
return is;
}
我自己测试的时候使用ifstream绑定一个txt文件,打不出来。。
首先谢谢你
这里关于逗号表达式的应用有一点疑问:
我原来先判断是不是有输入,再判断输入是不是结尾。这样的话不管读入过程中发生什么问题,都可以继续读入,直到遇到文件结束符。而你改进以后的函数只管读入,万一有错(无论出现bad还是fail),流都处于错误状态,文件读入就不会完全
不知道我的理解对不对?请指教
注掉第二个函数,只用第一个,无限读入
注掉第一个函数,只用第二个,vector.size()==0
问题全部解决,我全程犯了个错误,鉴于这个错误是如此低级。。。就不说了
hJin版,你的函数正确,我的也能用~
Thank you so much