标准IO库

来源:互联网 发布:编程培训班靠谱吗 编辑:程序博客网 时间:2024/05/16 07:10

        标准库定义了一族类型,支持控制窗口、文件和string对象的读写操作,这三种操作分别定义在iostream、fstream和sstream三种头文件中,它们包含了istream、ostream、iostream;ifstreamofstreamfstream;istringstreamostringstreamstringstream等IO类型,它们的基本继承关系如下所示:


    


        条件状态:IO标准库管理一系列条件状态成员,用来标记给定的IO对象是否处于可用状态,或者碰到了哪种

                         特定的错误。

                 条件状态的种类:badbit标志,系统级故障,无法恢复;failbit标志,可恢复错误;eofbit标志,遇到文

                                             件结束符设置。

                 IO标准库的条件状态和操作:

                         strm::iostate                                    //用于定义条件状态

                         strm::badbit

                         strm::failbit

                         strm::eofbit

                         s.eof()                                              //如果设置了eofbit,则函数返回true

                         s.fail()

                         s.bad()

                         s.good()                                          //如果流处于有效状态则返回true

                         s.clear()                                          //将流中的所有状态值都清空

                         s.clear(flag)                                    //将指定条件状态清空,flag类型为strm::iostate

                         s.setstate(flag)                               //给流s添加指定条件

                         s.rdstate()                                       //得到当前条件状态

       

         缓冲区的刷新:

                         程序正常结束

                         当缓冲区已经满了,缓冲区写入下一个值之前刷新

                         操作显示刷新,包括endl、flush、ends,如,cout << "hi!" << flush;

                         unitbuf操作符设置值流内部状态,从而清空缓冲区,如果需要刷新所有输入,最好使用unitbuf操

                                                          作符,使用方法例如,cout << unitbuf << "first" << "second" << nounitbuf;

                         输出流与输入流关联,如:cin.tie(&cout)绑定、cin.tie()返回绑定流、cin.tie(0)解除绑定


        文件的输入和输出

                两种打开文件的方式:

                         直接调用含有文件名的构造函数如:ifstream infile(ifile.c_str())、ofstream outfile(ofile.c_str())

                         采用默认构造函数,调用open成员函数如:ifstream infile,infile.open(infile_cstr())

                一个打开并检查输入文件的程序

                    ifstream& open_file(ifstream &in, const string &file)

                   {

                         in.close();

                         in.clear();                           //关闭流并不能改变流对象的内部状态,所以要调用clear()

                                                                     成员函数清空以前的错误条件状态

                         in.open(file.c_str());

                         return in;

                  }

               文件模式:

                       in                                      //用于指定与ifstream或fstream关联的文件,默认ifstream打开模式

                       out                                    //用于指定与ofstream或fstream关联的文件,默认ofstream打开模式,

                                                                  文件会被清空

                       app                                   //每次写之前找到文件尾

                       ate                                    //可以关联所有文件,打开后立即定位到文件尾

                       trunc                                 //打开文件时,清空已存在在的文件流

                       binary                               //可以关联所有文件

                       注:fstream默认以in和out模式打开,不清空数据。

               打开模式的有效组合

                       out

                       out | app
                       out | trunc                         //效果与out相同

                       in

                       in | out

                       in | out | trunc                   //读写操作,删除已有数据

                       注:上述打开模式都可以添加ate模式


        字符串流

               三种类型的字符串流:istringstream、ostringstream、stringstream

               特定操作:

                       stringstream strm                                 //创建自由的stringstream对象

                       stringstream strm(s)                             //存储字符串副本的stringstream对象

                       strm.str()                                              //返回string对象

                       strm.str(s)                                            //将字符串赋给strm

              stringstream的两种应用:

                       将一行字符,分割为若干个单词

                                 string line, word;

                                 while(getline(cin, line))

                                 {

                                          istringstream stream(line);

                                          while(stream >> word){ processing(); }

                                 }

                        多种数据类型之间实现自动格式转换:用法参见258页

原创粉丝点击