第10章 C++的输入和输出流.ppt

上传人:s****8 文档编号:66866877 上传时间:2022-12-21 格式:PPT 页数:29 大小:255KB
返回 下载 相关 举报
第10章 C++的输入和输出流.ppt_第1页
第1页 / 共29页
第10章 C++的输入和输出流.ppt_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《第10章 C++的输入和输出流.ppt》由会员分享,可在线阅读,更多相关《第10章 C++的输入和输出流.ppt(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第10章章 C+的输入和输出流的输入和输出流 本章要点:C+流的基本概念 输出运算符、get()、getline()和 read()的输入操作 格式化操纵符的应用 输入输出运算符的重载 文件的输入输出操作 字符串流的输入输出操作 流状态的错误处理10.1 循序渐进学理论循序渐进学理论 10.1.1 C+流的概念流的概念 I/O流类库是一个利用多继承和虚拟继承实现的类层次结构,如图10-1所示。它的主要作用是提供标准的、基于文件的和基于字符串流的输入输出操作。程序员也可以重载输入输出符,完成自定义类对象的输入输出操作。图10-1 C+的I/O流类库结构 1.基本的I/O流类库 在图10-1中,

2、ios是虚基类,负责数据流的设置功能,类istream负责输入流的操作,类ostream负责输出流的操作,类iostream负责双向数据流的输入输出操作。输入流是指从输入设备(键盘、文件等)流向计算机内存的数据流,输出流是指从计算机内存流向输出设备(显示器、文件等)的数据流。在C+语言中,最常用的输入输出运算符是“”和“”,为了使用基本I/O流类库提供的操作,必须在程序中包含头文件iostream:#include 2.文件I/O流类库 在图10-1中,类ifstream、类ofstream和类fstream分别继承于基本I/O流类库中的类iostream、类ostream和类iostream

3、,它们还有一个公共基类fstreambase,在图10-1中没有列出。其中,类ifstream提供文件的输入操作,即读取文件的内容到内存,类ofstream提供文件的输出操作即将内存中的数据写入文件,类fstream同时提供文件的输入和输出操作,详见10.1.6节。为了使用文件I/O流类库提供的操作,必须在程序中包含头文件fstream:#include 3.字符串I/O流类库 在 图 10-1中,类 istringstream、类 ostringstream和 类stringstream分别继承于基本I/O流类库的类iostream、类ostream和 类 iostream,它 们 还 有

4、一 个 公 共 基 类strstreambase,在图10-1中没有列出。其中,类istringstream提供从字符串中读取数据的操作,类 ostringstream提 供 将 数 据 写 入 字 符 串 的 操 作,类stringstream同时提供字符串的读取和写入操作。为了使用字符串I/O流类库提供的操作,必须在程序中包含头文件sstream:#include 10.1.2 输出操作输出操作1.输出操作符 对于输出运算符“”,我们一定不会感到陌生,其应用格式如下:其中,输出运算符“”表示数据从操作数2流向操作数1。操作数1是输出类ostream的类对象,通常是cout,表示标准的屏幕输

5、出。操作数2是存储输出流的变量或对象,它可以是内嵌类型(int型、double型、char型、bool型等)的变量或表达式、指针类型的变量,或自定义类对象。2.成员函数put()输出类ostream的成员函数put()用于输出一个字符,其格式是:ostream&.put(char ch);其中,参数ch用于存储需要输出的字符,最常用的ostream类对象是cout。例如:cout.put(X);/显示输出字母X 由于该函数的返回类型为ostream类对象的引用,所以它可以被串联使用,例如:cout.put(G).put(o).put(o).put(d);/显示输出Good3.成员函数write

6、()输出类ostream的成员函数write()用于输出一个指定长度的字符串,其格式是:ostream&.write(const char*str,int length);其中,参数str用于存储需要输出的字符串,length用于指定字符串中希望被输出的字符的个数,当length等于strlen(str)时,输出整个字符串。和函数put()一样,在函数write()中最常用的的ostream类对象是cout。该函数的返回类型也是ostream类对象的引用,所以也可以被串联使用。10.1.3 输入操作输入操作1.输入操作符 输入运算符“”的应用格式是:其中,输入运算符“”表示数据从操作数1流向操

7、作数2。操作数1是输入类istream的类对象,常用的是标准的键盘输入对象cin。操作数2是存储输入数据的内嵌类型的变量或自定义的类对 象。如果操作数2是自定义的类对象,必须定义输入运算符的重 载函数。注意:在缺省情况下,输入运算符“”会忽略空格、制表 符、换行符和回车 2.成员函数get()输入类istream的成员函数get()可以读入一个字符或者一个字符串,它不会忽略空格、制表符、换行符和回车,而是将它们也当作字符一并读入。它有三种原型:int get();/istream&get(char&ch);/istream&get(char*str,int length,char delimi

8、ter=n);/原型是在参数的控制下读入若干个字符,结束读入操作的条件有三种:(1)参数length,表示读入字符的数量不得多于length-1个;(2)参数delimiter,缺省值是换行符“n”,用于指定一个特定的字符,当遇到该字符时就停止读入操作。(3)当遇到文件结束符EOF时。3.成员函数getline()输入类istream的成员函数getline()的原型如下:istream&getline(char*str,int length,char delimiter=n);它和函数get()的功能基本相同,用于读取一串字符,直到读入字符的个数大于length-1,或者遇到文件的结束符EO

9、F,或者遇到delimiter。但是,函数getline()要比函数get()好用得多,因为它能够自动丢弃delimiter,而不会将它留在istream中作为下一个输入的字符。4.成员函数read()输入类istream的成员函数read()的功能是从输入流中读取指定数量的字符,其函数原型如下:istream&read(char*str,int length);其中,参数str用于存放读入的字符,length为指定读入的字符的数量。10.1.4 格式化的输入输出操作格式化的输入输出操作 有时,我们会希望按照一种特殊的格式输出各种数据。例如,增加浮点数的精度,以十六进制显示整数,数据的对齐方式

10、,用字符串“true”或“false”输出bool变量值等。每一个iostream类对象都记录着当前的格式状态,通过一组预定义的操纵符,就能够修改对象的格式状态,从而控制数据的输入输出格式。操纵符的使用方法和普通的数据一样,写在输入输出运算符的后面。例如:/控制输出数据的宽度,用空格填充在数据的左侧 cout set(w)(istream&in,const ClassType&object);friend ostream&operator (ostream&out,const ClassType&object);其中,参数in是istream类对象的引用,out是ostream类对象的引用,o

11、bject是自定义的类类型的const引用。10.1.6 文件的输入输出操作文件的输入输出操作1.文件的打开 打开一个文件的方法有三种:ofstream.open(,);ifstream.open();fstream.open(,);其中,ofstream类对象打开一个用于输出的文件,即被写入的文件,ifstream类对象打开一个用于输入的文件,即被读取的文件,fstream类对象打开一个既可以输出又可以输入的文件。C+提供的打开方式如表10-2所示:方 式含 义in以读方式打开文件out以写方式打开文件app以追加写入方式打开文件ate文件打开后,文件指针位于文件尾trunk若文件存在,令其

12、长度为0,清除原有的内容;若文件不存在,则创建新文件binary以二进制方式打开文件,缺省时为文本方式nocreate打开一个存在文件,若文件不存在,则打开失败noreplace打开一个文件,若文件存在,但没有设置ate或app,则打开失败10-2 文件的打开方式2.文件的关闭 为了保证写入数据的安全,在退出程序之前必须关闭已经打开了的文件,断开文件和程序的连接,释放相关的内存。关闭文件的格式如下:.close();2.文件的关闭 为了保证写入数据的安全,在退出程序之前必须关闭已经打开了的文件,断开文件和程序的连接,释放相关的内存。关闭文件的格式如下:.close();2.文件的关闭 为了保证

13、写入数据的安全,在退出程序之前必须关闭已经打开了的文件,断开文件和程序的连接,释放相关的内存。关闭文件的格式如下:.close();3.文件的顺序读写 文件的顺序读写是指从文件头一直读写到文件尾,通常采用get()、getline()、put()、read()或write()等函数完成对文件的读写操作。以get()函数为例:while(file1.get(ch)/读取文件中的内容并显示在屏幕上 cout.put(ch);需要注意的是,在读取文件内容时,如果遇到文件结束符EOF,读操作会被自动停止,与此同时,文件类对象也转至“遇到文件结束符”的状态,不能再执行其他任何的输入输出操作。如果需要继续

14、读写该文件,必须调用函数clear()清除文件类对象的状态,4.文件的随机读写 C+还提供对文件的随机读写能力,用定位成员函数seekg()或seekp()将文件的读写指针移到指定的位置。移动文件读写指针的方法有两种,一是直接将指针移到指定的位置,二是在某个参照位置的基础上,将指针移动一定的偏移量。所以,定位文件读指针的重载函数集是:istream&istream:seekg(int position);istream&istream:seekg(int offset_position,ios_base:seekdir way);定位文件写指针的重载函数是:ostream&ostream:se

15、ekp(int position);ostream&ostream:seekp(int offset_position,ios_base:seekdir way);1.字符串流的输入操作 在使用字符串流的输入操作时,必须定义一个ostringstream类对象,例如:ostringstream buffer;/定义一个ostringstream对象buffer ostringstream类对象有两个重要的特点:一是它的长度能够随着输入的字符而自动增长;二是它能够复合各种类型的数据,并将它们自动转换成字符串。为了实现基于字符串的操作,ostringstream类提供了一些成员函数,常用的有:st

16、ring ostringstream:str();/返回ostringstream类对象中输入的字符串10.1.5 字符串流的输入输出操作字符串流的输入输出操作2.字符串流的输入操作 在图10-1中,istringstream类负责字符串流的输入操作,因此在使用字符串流的输入操作时,必须定义一个istringstream类对象,格式如下:istringstream ();字符串流的输入操作常被用于将数值字符串转换成算术值。1.函数指针的概念 在I/O流类中,每一个输入输出对象都拥有一组用来记录各种状态的数据成员即状态字,它的各个比特位分别代表了某种含义,可以用常量来表示,如表10-3所示。10

17、.1.6 流错误的处理流错误的处理常 量位 置含 义ios:goodbit第0位若为0,表示正常状态,无错误ios:;eofbit第1位若为1,表示到达了文件尾ios:failbit第2位若为1,表示操作不成功,比如打开一个文件失败或者输入一个无效格式的数据ios:badbit第3位若为1,表示试图进行无效的操作10-3 流类中的状态字 C+语言提供了四个成员函数,用来读取状态字中的比特位:bool good()如果返回true,表示类对象处于正常状态bool eof()如果返回true,表示文件指针遇到了文件尾bool fail()如果返回true,表示操作不成功bool bad()如果返回

18、true,表示试图进行无效的操作 修改流对象状态字的方法有两种:(1)使用成员函数clear()成员函数clear()的功能是清除流对象的状态,将流对象恢复到正常的、无错误的状态。其原型是:void clear(iostate _State=goodbit);(2)使用成员函数setstate()成员函数setstate()的功能是在现有状态字的基础上,再设置一个状态,通常用于增加一个错误状态。10.2 典型实例练能力典型实例练能力 10.2.1 典型实例一:典型实例一:显显示一个菱形示一个菱形图图案案 【实例题目】编写一个程序,显示一个13行的菱形图案。10.2.2 典型实例二:典型实例二:

19、简单简单的通迅的通迅录录 【实例题目】编写一个简单的通讯录程序,在文件myNote中记录朋友的姓名、年龄和电话号码,允许用户向其中添加信息、根据姓名查询或显示所有的信息。10.3 上机练习重应用上机练习重应用 10.3.1 上机练习一:上机练习一:浏览浏览文本文件文本文件 【练习题目】编写一个程序,用于浏览文本文件。要求,每显示5行就暂停下来,然后按回车键继续显示剩余的文本文件。5.3.2 上机练习二:上机练习二:神奇的神奇的汉诺汉诺塔塔 【练习题目】传说婆罗门庙中有一个塔台,台上有三根用钻石镶嵌的柱子,分别记作A柱、B柱和C柱,在A柱上放着64个金盘,每个金盘的大小都不一样,并且小金盘子放在大金盘的上面,显然,最大的金盘位于最下面,最小的金盘位于最上面。现在,试着把A柱上的盘子移到C柱上,移动规则是一次只能移动一个金盘,并且在移动过程中大金盘不能位于小金盘的上面。据说,当A柱上的所有金盘都移到C柱上的那一天,就是世界末日。试着用递归法编写一个程序,输入A柱上的盘子数量,输出正确的移动步骤和总的步数。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁