第8章 IO流.ppt

上传人:s****8 文档编号:69247048 上传时间:2023-01-01 格式:PPT 页数:53 大小:562.50KB
返回 下载 相关 举报
第8章 IO流.ppt_第1页
第1页 / 共53页
第8章 IO流.ppt_第2页
第2页 / 共53页
点击查看更多>>
资源描述

《第8章 IO流.ppt》由会员分享,可在线阅读,更多相关《第8章 IO流.ppt(53页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第第8章章 IO流流第第8章章 I/O流流8.1 概述概述8.2 格式化输入格式化输入/输出输出8.3 重载流的插入符和提取符重载流的插入符和提取符8.4 常用成员函数常用成员函数I/O8.5 文件流操作文件流操作8.6 应用实例应用实例第第8章章 IO流流8.1 概述概述8.1.1 流的概念流的概念8.1.2 流类库流类库8.1.3 支持文件的流类支持文件的流类第第8章章 IO流流8.1.1 流的概念流的概念在在C+C+的输入输出系统中,最核心的对象是的输入输出系统中,最核心的对象是流流(stream)(stream)。一个流就是一个字节序列。一个流就是一个字节序列。程序程序键盘键盘文件文件

2、屏幕屏幕文件文件输入流输入流cincin输出流输出流coutcout这两个流由系统自动提供,在程序中要使用一个这两个流由系统自动提供,在程序中要使用一个include预编译指令指定头文件预编译指令指定头文件iostream。第第8章章 IO流流 C+C+将与输入和输出有关的操作定义为将与输入和输出有关的操作定义为一个一个类体系类体系,放在一个系统库里,以备用户,放在一个系统库里,以备用户调用。调用。这个执行输入和输出操作的类体系就叫这个执行输入和输出操作的类体系就叫做做流类流类,提供这个流类实现的系统库就叫做,提供这个流类实现的系统库就叫做流类库流类库。8.1.2 流类库流类库第第8章章 IO

3、流流1 1流类库的基本结构流类库的基本结构8.1.2 流类库流类库iosistreamostreamoftreamiftream iostreamfstreamstrstreamstdiostream虚基类虚基类streambuf指针filebufstrstreambufstdiobuf第第8章章 IO流流2 2预定义的流对象预定义的流对象C+C+的流库预定义了的流库预定义了4 4个流对象:个流对象:cincin、coutcout、cerrcerr和和clogclog流是一个抽象概念,当实际进行流是一个抽象概念,当实际进行I/0I/0操作时,必须将流操作时,必须将流和一种具体的物理设备相关联。

4、和一种具体的物理设备相关联。cincin 与标准输入设备相关联与标准输入设备相关联coutcout 与标准输出设备相关联与标准输出设备相关联cerrcerr 与标准错误输出设备相关联与标准错误输出设备相关联(非缓冲方式非缓冲方式)clog clog 与标准错误输出设备相关联与标准错误输出设备相关联(缓冲方式缓冲方式)8.1.2 流类库流类库第第8章章 IO流流8.1.3 支持文件的流类支持文件的流类iosfilebufistreamfstreambaseostreamofstreamiostreamifstreamfstreamstreambuf第第8章章 IO流流8.2 格式化输入格式化输入

5、/输出输出8.2.1 使用使用ios类的成员函数进行格式控制类的成员函数进行格式控制8.2.2 使用控制符进行格式控制使用控制符进行格式控制第第8章章 IO流流8.2.1 使用使用iosios类的成员函数进行格式控制类的成员函数进行格式控制对输入对输入/输出的格式进行控制可以使用输出的格式进行控制可以使用ios类的类的成员函成员函数数来实现,如格式标志字、域宽、充填字符及输出精来实现,如格式标志字、域宽、充填字符及输出精度等。度等。1使用使用ios类的成员函数设置标志字类的成员函数设置标志字 ios类中声明了一个数据成员,用于记录当前流类中声明了一个数据成员,用于记录当前流的格式化状态,这个数

6、据成员称为标志字。的格式化状态,这个数据成员称为标志字。第第8章章 IO流流8.2.1 使用使用iosios类的成员函数进行格式控制类的成员函数进行格式控制第第8章章 IO流流8.2.1 使用使用iosios类的成员函数进行格式控制类的成员函数进行格式控制第第8章章 IO流流ios的几个直接操作标志字的公有成员函数:的几个直接操作标志字的公有成员函数:(1)long flags()返回标志字。返回标志字。(2)long flags(long)使用参数值来更新标志字,并返回更新前的标使用参数值来更新标志字,并返回更新前的标志字。志字。8.2.1 使用使用iosios类的成员函数进行格式控制类的成

7、员函数进行格式控制第第8章章 IO流流(3)long setf(long setbits,long field)将将field所指定的标志位清零,将所指定的标志位清零,将setbits为为1的标志位置的标志位置为为1,并返回设置前的标志字。,并返回设置前的标志字。(4)long setf(long)设置参数所指定的标志位,并返回更新前的标志字。设置参数所指定的标志位,并返回更新前的标志字。(5)long unsetf(long)清除参数所指定的标志位,并返回更新前的标志字。清除参数所指定的标志位,并返回更新前的标志字。8.2.1 使用使用iosios类的成员函数进行格式控制类的成员函数进行格式

8、控制第第8章章 IO流流【例例8.1】以几种不同的格式输出同一浮点数,示例如何以几种不同的格式输出同一浮点数,示例如何使用成员函数来操作标志字。使用成员函数来操作标志字。8.2.1 使用使用iosios类的成员函数进行格式控制类的成员函数进行格式控制第第8章章 IO流流【例【例8.2】以几种不同的进制输出同一整数。】以几种不同的进制输出同一整数。示例示例ios定义的公有静态符号常量的作用定义的公有静态符号常量的作用。8.2.1 使用使用iosios类的成员函数进行格式控制类的成员函数进行格式控制第第8章章 IO流流2使用使用ios类的成员函数设置域宽、充填字符及类的成员函数设置域宽、充填字符及

9、输出精度输出精度(1)设置输出数据所占宽度的函数设置输出数据所占宽度的函数int width()返回返回当前输出的数据宽度当前输出的数据宽度。int width(int)设置设置当前输出的数据宽度,并返回更新之前的宽当前输出的数据宽度,并返回更新之前的宽度值度值。8.2.1 使用使用iosios类的成员函数进行格式控制类的成员函数进行格式控制第第8章章 IO流流(2)填充当前宽度内的填充字符函数填充当前宽度内的填充字符函数char fill()该函数用来返回当前所使用的填充字符。该函数用来返回当前所使用的填充字符。char fill(char)该函数用来设置当前填充字符为参数所表示的字符,该函

10、数用来设置当前填充字符为参数所表示的字符,并返回更新前的填充字符。并返回更新前的填充字符。8.2.1 使用使用iosios类的成员函数进行格式控制类的成员函数进行格式控制第第8章章 IO流流(3)设置浮点数输出精度函数设置浮点数输出精度函数int precision()该函数用来返回当前浮点数的有效数字的个数。该函数用来返回当前浮点数的有效数字的个数。int precision(int)该函数用来设置当前浮点数输出时的有效数字个数该函数用来设置当前浮点数输出时的有效数字个数为该函数的参数值,并返回更新前的值。为该函数的参数值,并返回更新前的值。8.2.1 使用使用iosios类的成员函数进行格

11、式控制类的成员函数进行格式控制第第8章章 IO流流【例例8.3】示例如何使用示例如何使用ios类的成员函数设置域宽、类的成员函数设置域宽、充填字符及输出精度。充填字符及输出精度。8.2.1 使用使用iosios类的成员函数进行格式控制类的成员函数进行格式控制第第8章章 IO流流8.2.2 使用控制符进行格式控制使用控制符进行格式控制第第8章章 IO流流8.2.2 使用控制符进行格式控制使用控制符进行格式控制第第8章章 IO流流【例【例8.4】使用控制符进行格式控制,完成例】使用控制符进行格式控制,完成例8.3相同相同的的功能功能。8.2.2 使用控制符进行格式控制使用控制符进行格式控制第第8章

12、章 IO流流由于重载插入符和提取符时,其左边的参数是流对象,由于重载插入符和提取符时,其左边的参数是流对象,而右边的参数是类的对象,因此,插入符和提取符只而右边的参数是类的对象,因此,插入符和提取符只能重载为能重载为友元函数友元函数。插入符重载的一般格式如下:插入符重载的一般格式如下:ostream&operator(ostream&s,classa&a)return s;8.3 重载流的插入符和提取符重载流的插入符和提取符第第8章章 IO流流【例例8.5】重载流的插入符和提取符,实现复数的输入重载流的插入符和提取符,实现复数的输入和输出。和输出。8.3 重载流的插入符和提取符重载流的插入符和

13、提取符第第8章章 IO流流8.4 常用成员函数常用成员函数I/O8.4.1 输入流的常用成员函数输入流的常用成员函数8.4.2 输出流的常用成员函数输出流的常用成员函数第第8章章 IO流流8.4.1 输入流的常用成员函数输入流的常用成员函数1.read()函数函数istream&read(char*pch,int nCount);将指定的将指定的nCount个字符读入内存中的字符数组个字符读入内存中的字符数组pch。如果读取的字符数量少于指定的数量,就会设置如果读取的字符数量少于指定的数量,就会设置failbit错误位。错误位。第第8章章 IO流流8.4.1 输入流的常用成员函数输入流的常用成

14、员函数2.get()函数函数该函数有该函数有3种主要形式:种主要形式:istream&int get()从指定的输入流中输入一个字符从指定的输入流中输入一个字符(包括空白字符包括空白字符),并返回该字符作为函数调用的值;遇到输入流,并返回该字符作为函数调用的值;遇到输入流中的文件结束符时,此中的文件结束符时,此get函数返回函数返回EOF。第第8章章 IO流流8.4.1 输入流的常用成员函数输入流的常用成员函数istream&int get(char&rch)从输入流读取一个字符从输入流读取一个字符(包括空白字符包括空白字符),并将其,并将其存储存储rch。当遇到文件结束符时,此当遇到文件结束

15、符时,此get函数返回函数返回0,否则返,否则返回对回对istream对象的引用,并用该引用再次调用对象的引用,并用该引用再次调用get成员函数。成员函数。第第8章章 IO流流8.4.1 输入流的常用成员函数输入流的常用成员函数istreamistream&intint get(charget(char&pchpch,intint nCount,charnCount,char delimdelim=nn)从输入流中读取字符。函数要么在读取到从输入流中读取字符。函数要么在读取到nCount-1nCount-1个字符后终止,要么在读取到指定的分隔符个字符后终止,要么在读取到指定的分隔符delimd

16、elim时时终止。终止。第第8章章 IO流流8.4.1 输入流的常用成员函数输入流的常用成员函数 3.getline()与带与带3个参数的个参数的get成员函数类似,它读取一行字成员函数类似,它读取一行字符串后在字符数组末尾加入符串后在字符数组末尾加入0。不同的是,。不同的是,getline要从输入流中删除分隔符要从输入流中删除分隔符(即读取并删除它即读取并删除它),而不是把它存放在数组中。而不是把它存放在数组中。4.gcount()函数函数无参函数,统计最后一次输入操作读取的字符数。无参函数,统计最后一次输入操作读取的字符数。第第8章章 IO流流8.4.1 输入流的常用成员函数输入流的常用成

17、员函数 5.ignore()函数函数该函数原型为:该函数原型为:istream&ignore(int n=1,int t=EOF);遇到指定的终止字符遇到指定的终止字符t时提前结束或跳过输入流中时提前结束或跳过输入流中n个字符结束个字符结束(此时跳过包括终止字符内的若干个此时跳过包括终止字符内的若干个字符字符)。终止字符仍停留在输入流中。终止字符仍停留在输入流中。第第8章章 IO流流8.4.1 输入流的常用成员函数输入流的常用成员函数 6.putback()函数函数该函数原型为:该函数原型为:istream&putback(char ch);把上一次从输入流中通过把上一次从输入流中通过get(

18、或或getline)取得的字取得的字符再放回该输入流中。对于应用程序需要扫描输入符再放回该输入流中。对于应用程序需要扫描输入流以查找以特定字符开头的字段来说,这是非常有流以查找以特定字符开头的字段来说,这是非常有用的。当输入一个字符时,应用程序把该字符放回用的。当输入一个字符时,应用程序把该字符放回输入流,以保证输入的数据中包含该字符。输入流,以保证输入的数据中包含该字符。第第8章章 IO流流8.4.1 输入流的常用成员函数输入流的常用成员函数 7.peek()函数函数无参函数,返回输入流的下一个字符,但并不将无参函数,返回输入流的下一个字符,但并不将其从输入流中删除。其作用是观测该字符,字符

19、其从输入流中删除。其作用是观测该字符,字符指针仍停留在原来位置上。指针仍停留在原来位置上。第第8章章 IO流流8.4.2 输出流的常用成员函数输出流的常用成员函数1.write()函数函数ostream&write(const char*pch,int nCount);将内存中的字符数组将内存中的字符数组pch中中指定的指定的nCount个字符个字符写写入文件入文件。2.put()函数函数ostream&put(char rch);输出一个字符。输出一个字符。第第8章章 IO流流8.4.2 输出流的常用成员函数输出流的常用成员函数【例【例8.6】从输入的串中分离数字串,示例常用】从输入的串中分

20、离数字串,示例常用成员函数成员函数I/O第第8章章 IO流流8.5 文件流操作文件流操作8.5.1 文件流文件流8.5.2 文件的打开与关闭文件的打开与关闭8.5.3 文件的读写文件的读写第第8章章 IO流流 按按数据的存储形式来分类,文件可分为数据的存储形式来分类,文件可分为文本文件文本文件和和二进制文件二进制文件。在在文本文件文本文件中,每个字节存放一个中,每个字节存放一个ASCII代码表代码表示一个字符,文本文件的优点是可直接按字符示一个字符,文本文件的优点是可直接按字符形式输形式输出。出。二进制二进制文件文件则是把数据的内部存储形式原样存放则是把数据的内部存储形式原样存放到文件中,这种

21、文件的优点到文件中,这种文件的优点是存储是存储效率高效率高,但,但不能直不能直接按字符形式输出。接按字符形式输出。8.5.1 文件流文件流第第8章章 IO流流 按数据的存取方式来分类,文件可分为按数据的存取方式来分类,文件可分为顺序文顺序文件件和和随机读写文件随机读写文件。在在C+中,文件既可以进行顺序访问,也可以中,文件既可以进行顺序访问,也可以进行随机访问。进行随机访问。8.5.1 文件流文件流第第8章章 IO流流C+C+有三种文件流:输入文件流、输出文件流和输入有三种文件流:输入文件流、输出文件流和输入/输出文件流。输出文件流。8.5.1 文件流文件流打开文件读写操作关闭文件创建创建个个

22、文件流文件流对象对象,并与指定,并与指定的文件相关联的文件相关联第第8章章 IO流流1.打开文件打开文件有两种方法有两种方法:先建立流对象,然后调用函数先建立流对象,然后调用函数open连接外部文件连接外部文件 流类流类 对象名对象名;对象名对象名.open(文件名文件名,方式方式);调用流类带参数的构造函数,建立流对象的同时连接调用流类带参数的构造函数,建立流对象的同时连接外部文件外部文件 流类流类 对象名对象名(文件名文件名,方式方式);其中,其中,“流类流类”为为ifstream、ofstream或或fstream。8.5.2 文件的打开与关闭文件的打开与关闭第第8章章 IO流流8.5.

23、2 文件的打开与关闭文件的打开与关闭第第8章章 IO流流2.关闭文件关闭文件使用使用close()成员函数进行关闭:成员函数进行关闭:.close()其中,其中,是待关闭的文件流的对象是待关闭的文件流的对象名。名。8.5.2 文件的打开与关闭文件的打开与关闭第第8章章 IO流流1文本文件的读写文本文件的读写 文本文件用默认方式打开。文本文件用默认方式打开。【例例8.7】从输入的串中分离数字串,先将其存从输入的串中分离数字串,先将其存入磁盘文件,然后将其读出并在屏幕上显示出来。入磁盘文件,然后将其读出并在屏幕上显示出来。8.5.3 文件的读写文件的读写第第8章章 IO流流8.5.3 文件的读写文

24、件的读写第第8章章 IO流流2二进制文件二进制文件的读写的读写 二进制文件用二进制文件用binary方式打开,读写方式完全方式打开,读写方式完全由程序控制,一般的字处理软件不能参与编辑。由程序控制,一般的字处理软件不能参与编辑。【例例8.8】用二进制文件处理学生信息用二进制文件处理学生信息8.5.3 文件的读写文件的读写第第8章章 IO流流8.5.3 文件的读写文件的读写第第8章章 IO流流3文件的随机读写文件的随机读写 文文件打开以后,系统自动生成两个隐含的流指针件打开以后,系统自动生成两个隐含的流指针:读指针读指针和和写指针写指针。在输入文件流类中,有关读指针的函数如下:在输入文件流类中,

25、有关读指针的函数如下:(1)移动读指针移动读指针函数函数istream&istream:seekp(streampos pos);该函数的功能是将输入文件的指针移动到该函数的功能是将输入文件的指针移动到pos指定的指定的位置中。位置中。8.5.3 文件的读写文件的读写第第8章章 IO流流istream&istream:seekg(streamoff offset,seek_dir origin);其中,其中,origin的类型的类型seek_dir是一个枚举类型,有以是一个枚举类型,有以下三种取值下三种取值:ios:beg 表示指针的起始位置为文件头表示指针的起始位置为文件头ios:cur 表

26、示指针的起始位置为当前位置表示指针的起始位置为当前位置ios:end 表示指针的起始位置为文件尾表示指针的起始位置为文件尾该函数的功能是从该函数的功能是从origin指定的开始位置起,将文件指指定的开始位置起,将文件指针移动针移动offset个字节数个字节数。8.5.3 文件的读写文件的读写第第8章章 IO流流(2)返回读指针当前指向的位置值返回读指针当前指向的位置值streampos istream:tellg();该函数的功能是确定文件指针的当前位置该函数的功能是确定文件指针的当前位置。8.5.3 文件的读写文件的读写第第8章章 IO流流相应地,相应地,ostream类提供有关写指针的函数

27、如下类提供有关写指针的函数如下:(1)移动写指针函数移动写指针函数ostream&ostream:seekp(streampos pos);ostream&ostream:seekg(streamoff offset,seek_dir origin);(2)返回写指针当前指向的位置值返回写指针当前指向的位置值streampos ostream:tellp();函数参数的意义与读指针函数一样函数参数的意义与读指针函数一样。8.5.3 文件的读写文件的读写第第8章章 IO流流【例【例8.9】用二进制文件随机处理学生信息】用二进制文件随机处理学生信息8.5.3 文件的读写文件的读写第第8章章 IO流流8.6 应用实例应用实例设计一个基本的电话簿管理程序,具有添加、删除、设计一个基本的电话簿管理程序,具有添加、删除、查询电话等功能。查询电话等功能。目的:掌握目的:掌握I/OI/O流的各种打开方式及有关成员函数流的各种打开方式及有关成员函数的用法。的用法。第第8章章 IO流流8.6 8.6 应用实例应用实例

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

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

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com