文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>第八章 标准IO库

第八章 标准IO库

时间:2010-08-19  来源:静止的流水

C++的输入输出由标准库提供,支持控制窗口、文件、内存的读写操作

Cin cout 对象

标准库使用了继承来定义一组面向对象类

每一个头文件定义了3个类,包括只读,只写,以及读写共3*3=9个,此外每一个类都包括一个宽字符读写类,9*2=18个类

Iostream :istream从流中读取,ostream向流中写,iostream可读可写,wistream,wostream,wiostream

Fstream:ifstream,ofstream ,fstream,wifstream,wofstream,wfstream

Sstream:istringstream,ostringstream,stringstream,wistringstream,wostringstream,wstringstream

如果函数有基类类型的引用形参,可以传递派生类的对象来调用函数。

但是io对象不可以复制和赋值,含义主要有两层:1, 流对象不能存储在容器中,2, 形参或返回类型不能为流类型,但是可以是流的引用类型。

ofstream test(ofstream &file){//错误,不能返回流对象

    return file;

}

int main(int argc, _TCHAR* argv[])

{

    ofstream file1,file2;

    file1=file2;//错误,流对象不允许赋值

}

一般要传递流对象的引用给函数,可用非const引用的方式传递,因为读取流对象的时候,流对象的状态肯定改变。

IO标准库定义了一系列的条件状态,用于表示流对象的状态是否可用

Badbit,failbit,eofbit,s.eof(),s.fail(),s.good(),s.bad(),s.clear(),s.clear(flag)等等

一般程序只是单纯的检测流对象是否可用,但有时候必须检测流对象的状态时什么,判断哪儿出错了。

Badbit是系统级错误,无法恢复的读写错误;failbit是希望读入数字时输入了字符串,或读到文件结尾了.

int main(int argc, _TCHAR* argv[])

{

    int a;

    while(cin>>a,!cin.eof()){//逗号操作符返回最后一个操作数的值,当没有读到文件结尾的时候循环

       if(cin.bad())//当遇到系统错误的时候设置badbit位

           throw runtime_error("IOstream error");//抛出错误

       if(cin.fail()){//当读到不是int类型的参数时候,设置failbit位

           cin.clear(istream::failbit);//清除failbit位

           contimue;

       }

       cout<<a<<endl;//当流对象没有任何错误的时候,对a进行操作

    }

}

每个io对象都管理一个缓冲区

缓冲区刷新:

1.  显式的刷新

2.  缓冲区满

3.  程序正常结束,崩溃的时候不会刷新缓冲区

4.  Unitbuf清空缓冲区

5.  将读写流关联起来tie。

    cout<<a<<endl;//endl刷新

    cout<<a<<flush;//flush刷新

    cout<<unitbuf<<a<<nounitbuf;//nounitbuf将缓冲区回复为正常的,由系统管理的缓冲区刷新方式

    cin.tie(cout);//tie绑定刷新,tie(0)打破流上的捆绑

 

int main(int argc, _TCHAR* argv[])

{

    string s1("in.txt");

    string s2("out.txt");

    ifstream in;

    in.open(s1.c_str(),fstream::in);//c风格的字符串作为形参,文件模式in代表读,out代表清空写,app代表写前找到文件尾,ate打开后定位到文件尾,trunc清空,binary二进制方式打开,不处理字符

    if(!in){//判断in对象是否可用

       cout<<"error"<<endl;

       return -1;

    }

    in.close();

    in.clear();//这两个是一起用的,在关闭之后清空之前的对象状态之后才能重新定位到新的文件

    in.open(s2.c_str());

}

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载