C++练习字符串流的输入输出

参考资料:《C++ Primer习题集(第5版)》

#include 
#include 
#include 
#include //处理异常;
using namespace std;

istream &f(istream &in) {//不能拷贝IO对象, 不能将形参或返回类型设置为流类型;//进行IO操作的函数通常以引用方式传递和返回值;
    string v;
    while (in >> v, !in.eof()) {//直到遇到文件结束符才停止读取;
        if (in.bad()) {//不可恢复的错误, IO流崩溃;
            throw runtime_error("IO流错误");//抛出异常;
        }
        if (in.fail()) {//可以恢复的错误;//比如输入类型不匹配;
            cerr << "数据错误, 请重试: " << endl;
            in.clear();//将in中所有条件状态位复位, 将流的状态设置为有效, 返回void;//恢复正常;
            in.ignore(100, '\n');//读取并忽略最多100个字符, 包括'\n';
            continue;
        }
        cout << v << endl;
    }
    in.clear();
    return in;//返回引用;
}//读写一个IO对象会改变其状态, 因此传递和返回的引用不能是const的;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    ostringstream msg;//字符串输出流;//向string写入数据;
    msg << "C++ Primer 第五版" << endl;
    istringstream in(msg.str());//strm.str() : 返回strm所保存的string拷贝;
    f(in);
    return 0;
}
//执行结果;
/*
C++
Primer
第五版
*/

你可能感兴趣的:(C++练习字符串流的输入输出)