C++实战操练----标准IO库(2012-12-25)

来源:互联网 发布:中文文本词性标注算法 编辑:程序博客网 时间:2024/05/19 14:19

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;