io流

来源:互联网 发布:阿里云注册会员名 编辑:程序博客网 时间:2024/06/01 10:22
//此程序的结果:1.若传入的实参是ifstream或istringstream的对象,则无法输出最后一个单词,原因在于while语句的循环条件,用的是逗号语句,当最后一个词输入完毕,is这个对象里面已经空了,while循环的条件就不成立了,直接跳出循环
//将逗号改成或是可以的。2.若传入的是cin,则可以全部输出,不会多输出最后一个词一遍。但若将逗号改成或,则会IO操作失败。
istream& read_stream(istream& is)
{
string str;

while (is>>str,is.eof())//对于逗号运算符来说,首先对左侧的表达式求值,然后将求值结果丢弃掉。逗号运算符真正的结果是右侧表达式的值

{

if(is.bad())
{
throw runtime_error("IO流错误");
}
if (is.fail())
{
cerr<<"the data eror,please try again";
}

cout << str << endl;
}

is.clear();
return is;
}
int main(int argc,char* argv[])


{
ostringstream msg;
msg << "hello";
/*string s = "you are my sunshine";*/
//cout << msg.str() << endl;
istringstream ist(msg.str());
read_stream(cin);
system("pause");
return 0;
}




////该程序的结果:1.若传入的实参是ifstream或istringstream的对象,则会输出所有的单词。
////2.若传入的实参是标准输入cin这个对象,按下输入结束符后,会再输出一遍最后输入的那个单词。
istream& read_stream(istream& is)
{
   string str;
while (!is.eof())
{
is >> str;
cout << is.eof() << endl;
cout << str << endl;
}
is.clear();
return is;
}

int main()
{
/*ifstream fs("data.txt");
read_stream(fs);*/
read_stream(cin);
system("pause");
return 0;
}
原创粉丝点击