1、os<<"Goodbye!"<<endl;
如果os是一个ofstream对象,则os<<"Goodbye!"<<endl;将字符串“Goodbye!”及换行符写到os所关联的磁盘文件中;
如果os是一个ofstringstream对象,则os<<"Goodbye!"<<endl;将字符串“Goodbye!”及换行符写到os所关联的字符串流中
2、流类型不能作为函数的形参或返回类型,必须使用流类型的指针或引用;
3、编写一个函数,其唯一的形参和返回值都是istream&类型。该函数应一直读取流直到到达文件结束符为止,还应将读到的内容输出到标准输出中。最后重设流使其有效,并返回该流。并通过cin为实参实现调用来测试该函数;
#include <iostream>
using namespace std;
//编写get函数
istream& get(istream& in)
{
int ival;
while(in>>ival,!in.eof()){//遇到文件结束符钱一直读入数据
if(in.bad())//出现系统级故障
cout<<"IO stream corrupted";
if(in.fail()){//出现可恢复错误
cerr<<"bad data,try again";//提示用户
in.clear();//恢复流
in.ignore(200,' ');//跳过类型非法的输入项
continue; //继续输入数据
}
//读入正常
cout<<ival<<" ";
}
in.clear();
return in;
}
int main()
{
double dval;
get(cin);
cin>>dval;//重新使用恢复行的流
cout<<dval<<endl;
return 0;
}
4、while(cin>>i){}导致循环终止的原因是流对象cin进入错误状态,具体包括:在读入数据是出现以下情况:
系统级故障;读入了无效数据;遇到文件结束符
5、由于ifstream继承了istream,因此可将istream对象传递给形参为istream引用的函数;编写函数读取已命名文件;
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
//编写get函数
istream& get(istream& in)
{
int ival;
while(in>>ival,!in.eof()){//遇到文件结束符钱一直读入数据
if(in.bad())//出现系统级故障
cout<<"IO stream corrupted";
if(in.fail()){//出现可恢复错误
cerr<<"bad data,try again";//提示用户
in.clear();//恢复流
in.ignore(200,' ');//跳过类型非法的输入项
continue; //继续输入数据
}
//读入正常
cout<<ival<<" ";
}
in.clear();
return in;
}
int main()
{
string fileName;
//读入文件名
cout<<"Enter file name:"<<endl;
cin>>fileName;
//创建ifstream对象并绑定到名为filename的文件
ifstream inFile(fileName.c_str());
if(!inFile){ //打开指定的文件失败
cerr<<"error:can not open input file:"<<fileName<<endl;
return -1;
}
get(inFile);//以inFile为实参调用函数get
return 0;