12月1日——学习C++输入输出类库,这篇就够了 参考资料:C++ 参考手册 – cppreference.com 一、输入输出类库是什么? C++中为不同类型数据的标准输入和输出定义了专门的类,这些类构成了输入输出类库,也称为流类库、I/O类库。 新增输入输出类库的原因是:由于C语言没有运算符重载机制,导致stdio库的不可扩充性,让我们无法让printf()和scanf()支持类型的自动识别和对自定义类对象的扩充识别。 C++系统中的输入输出类,都定义在以下4个头文件中,各头文件包含的类如下: (1)iostreamios,抽象基类istream,通用输入流和其他输入流的基类ostream,通用输出流和其他输出流的基类iostream,通用输入输出流和其他输入输出流的基类 (2)fstreamifstream,输入文件流类ofstream,输出文件流类fstream,输入输出文件流类 (3)strstreamistrstream,输入字符串(字符数组)流类ostrstream,输出字符串(字符数组)流类strstream,输入输出字符串(字符数组)流类 (4)sstreamistringstream,输入字符串(string对象)流类ostringstream,输出字符串(string对象)流类stringstream,输入输出字符串(string对象)流类 各类的继承关系如下:
二、输入输出类库怎么用? (一)通用流 1.iostream类定义了以下三个标准流对象: cin,表示标准输入,从键盘读入数据。cout,表示标准输出,向屏幕输出或者写数据。cerr,表示标准错误,向屏幕写数据。 输出主要由重载的左移操作符(<<)来完成,输入主要由重载的右移操作符(>>)完成。 2.格式控制(对于后面介绍的文件流和字符串流同样适用) I/O流常用格式控制的函数有 其中,setiosflags有以下选项 实例如下: setf有两种格式: (1)fmtflags setf(fmtflags); (2)fmtflags setf(fmtflags,fmtfield);
第一个参数和以前一样,也是一个包含了所需设置的fmtflags值。第二参数指出要清楚第一个参数中的哪个位。 3.状态标志(对于后面介绍的文件流和字符串流同样适用) I/O流操作结果的状态信息被包含在io_state类型的对象中。io_state是一个枚举类型(就像open_mode一样),以下便是它包含的值。goodbit 无错误Eofbit 已到达文件尾failbit 非致命的输入/输出错误,可挽回badbit 致命的输入/输出错误,无法挽回 有两种方法可以获得输入/输出的状态信息。一种方法是通过调用rdstate()函数,它将返回当前状态的错误标记。例如,假如没有任何错误,则rdstate()会返回goodbit。 另一种方法则是使用下面任何一个函数来检测相应的输入/输出状态: 例子如下: 如果错误发生,那么流状态既被标记为错误,你必须用clear函数清除这些错误状态,以使你的程序能正确适当地继续运行。也可以用setstate函数设置错误标志位为指定状态,例如fs.setstate(ios::failbit);表示设置错误标志位为非致命性错误状态。 (二)文件流 由于文件设备并不像显示器屏幕与键盘那样是标准默认设备,它在fstream.h头文件中是没有像cout那样预先定义的全局对象,所以我们必须自己定义一个该类的对象。 1.打开文件 在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是: 参数: 打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下: 可以用“或”把以上属性连接起来,如 打开文件的属性取值是: 可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。 例如,以二进制输入方式打开文件 c:\config.sys 如果open函数只有文件名一个参数,则是以读/写普通文件打开,即: 另外,fstream 还有和 open( )一样的构造函数,对于上例,在定义时自动打开文件: 特别提出的是,另外有两个类可以输入或者输出方式打开文件 2.关闭文件 fstream提供了成员函数close()来完成此操作。 3.读写文件 (1)文本文件 使用另外一种打开方式。 (2)二进制文件 put()函数向流写入一个字符,其原型是ofstream &put(char ch),如file1.put(‘c’); get()函数比较灵活,有3种重载形式:和put()对应: 功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。如 。 这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如 这种形式把字符读入由 buf 指向的数组,直到读入了 num 个字符或遇到了由 delim 指定的字符,如果没使用 delim 这个参数,将使用缺省值换行符’\n’。例如: 要读写二进制数据块,使用成员函数read()和write()成员函数。 4.其他函数 (1)文件定位分为读位置和写位置的定位,对应的成员函数是seekg()和seekp()。 seek_dir 表示移动的基准位置,是一个有以下值的枚举: (2)getline(buffer, max)读取整行数据,直到遇到换行符,每行结尾的\n并不读入。 (3)删除文件用remove(“文件名”) (4)文件改名用rename(“旧文件名”,”新文件名”); (5)is_open():判断是否成功打开了文件。 (三)字符串流 1.istrstream、ostrstream和strstream用于C风格的字符串的输入输出 (1)istrstream (2)ostrstream 2.istringstream、ostringstream和stringstream用于C风格和C++风格的字符串的输入输出 (1)istringstream (2)ostringstream (3)stringstream 多次转换的时候,必须调用stringstream的成员函数clear(),否则有乱码。 可以像cout那样设置格式。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/80878.html