C++ Primer 学习笔记——IO类

1.ifstream 和istringstream都继承自istream,因此对三个类的对象的操作相似
2.IO对象不能拷贝不能赋值
IO操作的函数形参和返回值类型不能为流类型
进行IO操作的函数常以引用方式传递和返回流,且不能为const

条件状态

cin>>word 如果输入成功,流会保持有效状态,
cin也会进入错误状态,当word类型不符合时

IO库定义了一个与机器无关的iostate类型,提供了表达流状态的完整功能
rdstate(),返回一个iostate值,对应流的当前状态
clear() 清除(复位)所有错误标志位
clear(iostate ); 表示流的新状态

//8.1.2
#include<iostream>
using namespace std;
istream& f(istream& is)
{
    int ival;
    while (is >> ival , !is.eof())//文件结束时候,eofbit置位,eof()返回true
    {//要用‘,’,如果用逻辑符号&&,输入a时候,cin错误就马上退出循环。逗号运算符,先从标准输入流读取,在判断文件是否结束,最后结果为!is.eof()的值
        if (is.bad())//bad()若badbit置位(流已经奔溃),返回true
        {
            cout << "bad";
        }
        if (is.fail())//fail(),若badbit或failbit(IO操作失败,发生可修复错误),返回true
        {
            cerr << "bad";
            is.clear();
            is.setstate(istream::eofbit);
            continue;
        }
        cout << ival;

    }

    is.clear();//复位
    return is;
}
int main()
{
    cout << "begin";
    f(cin);
    return 0;
}

管理输出缓冲区
每个输出流都管理一个缓冲区,用来保存程序读写的程序,
缓冲刷新:数据真正写到输出设备或文件中

cout<<"1"<<endl  换行并刷新缓冲区
cout<<"1"<<flush 先输出,在刷新缓冲区
cout<<"1"<<ends 输出1和一个空字符,在刷新

cout<<unitbuf 所有输出操作后都会立即刷新
cout<<nounitbuf

关联输入和输出
标准库将cin和cout关联在一起,cin>>vial会导致cout的缓冲区被刷新,使得在读操作时候同时会打印
关于ios::tie
cin.tie(&cout)//cin与cout关联
http://blog.csdn.net/asx20042005/article/details/7365511

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值