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

本文详细介绍了C++中流操作的使用方法,包括如何通过istream和ofstream进行文件读写,如何处理流中的错误状态,以及如何重置流使其能够再次使用。文章提供了具体的代码示例来说明这些操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值