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

来源:互联网 发布:无锡大数据it 编辑:程序博客网 时间:2024/06/15 14:57

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
原创粉丝点击