第8章输入输出流对象精选PPT.ppt

上传人:石*** 文档编号:49397031 上传时间:2022-10-08 格式:PPT 页数:43 大小:1.74MB
返回 下载 相关 举报
第8章输入输出流对象精选PPT.ppt_第1页
第1页 / 共43页
第8章输入输出流对象精选PPT.ppt_第2页
第2页 / 共43页
点击查看更多>>
资源描述

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

1、第第8 8章输入输出流对章输入输出流对象象第1页,本讲稿共43页 内容提要内容提要n8.1 8.1 螺旋矩阵的输入输出问题螺旋矩阵的输入输出问题 n8.2 8.2 流流n8.3 8.3 无格式输入无格式输入/输出输出n8.4 8.4 输入输入/输出的格式控制输出的格式控制(重点重点)n8.68.6自定义类型对象的输入输出自定义类型对象的输入输出n8.7 8.7 文件的输入文件的输入/输出问题输出问题第2页,本讲稿共43页第8章输入/输出流对象2022/10/73提出问题提出问题n编程输出编程输出M*MM*M的螺旋矩阵,要求数据间的螺旋矩阵,要求数据间距与距与M M相同。例如,相同。例如,4*4

2、4*4的螺旋矩阵,的螺旋矩阵,其间距为其间距为4:4:1 2 3 4 1 2 3 4 12 13 14 5 12 13 14 5 11 16 15 6 11 16 15 6 10 9 8 7 10 9 8 7第3页,本讲稿共43页第8章输入/输出流对象2022/10/74分析问题分析问题nC+C+没有定义任何用于执行输入或输出没有定义任何用于执行输入或输出的语句,但可以使用的语句,但可以使用C C语言中的标准语言中的标准I/OI/O函数函数printf()printf()和和scanf()scanf()来解决此来解决此问题。问题。第4页,本讲稿共43页第8章输入/输出流对象2022/10/75

3、【例【例8-28-2】有如下程序:】有如下程序:/example8_2.cpp/example8_2.cpp#include#include int b=20;int b=20;float a=5.6;float a=5.6;int main()int main()printf(%dn,a);printf(%dn,a);scanf(%d,&a);scanf(%d,&a);scanf(%d,&b);scanf(%d,&b);printf(%dn,abc);printf(%dn,abc);return 0;return 0;该程序的运行结果为:该程序的运行结果为:161061273623 45 4

4、349980第5页,本讲稿共43页第8章输入/输出流对象2022/10/76nprintf()printf()与与scanf()scanf()存在以下两个缺点:存在以下两个缺点:1 1非类型安全非类型安全2 2不可扩充性不可扩充性第6页,本讲稿共43页第8章输入/输出流对象2022/10/77nC+C+使用类型安全(使用类型安全(type safetype safe)的)的I/OI/O流操作。不同类型的流操作。不同类型的I/OI/O流操作都是重流操作都是重载的,没有定义过载的,没有定义过I/OI/O功能的类型不具功能的类型不具备备I/OI/O操作的能力。操作的能力。C+C+标准库既可作标准库既

5、可作为标准数据类型数据的为标准数据类型数据的I/OI/O,也能用于,也能用于自定义类型的对象的自定义类型的对象的I/OI/O,这种扩展性,这种扩展性是是C+C+最有价值的特点之一。最有价值的特点之一。nC+C+用输入输出流来解决这个问题。下用输入输出流来解决这个问题。下面先介绍流的概念。面先介绍流的概念。第7页,本讲稿共43页第8章输入/输出流对象2022/10/78流流 n在在C+C+程序中,数据可以从键盘流入到程序中,数据可以从键盘流入到程序中,也可以从程序中流向屏幕或程序中,也可以从程序中流向屏幕或磁盘文件。把数据的流动抽象为流。磁盘文件。把数据的流动抽象为流。C+C+的输入输出操作是由

6、流来处理的。的输入输出操作是由流来处理的。第8页,本讲稿共43页第8章输入/输出流对象2022/10/79流的概念流的概念 n所谓流(所谓流(streamstream)是指数据从一个位)是指数据从一个位置流向另一个位置。流是字节的序列。置流向另一个位置。流是字节的序列。第9页,本讲稿共43页第8章输入/输出流对象2022/10/710n输入输出是一种数据传递操作,可输入输出是一种数据传递操作,可以看作字符序列在计算机内存与外设以看作字符序列在计算机内存与外设之间的流动,之间的流动,C+C+将数据从一个对象到将数据从一个对象到另一个对象的流动抽象为另一个对象的流动抽象为“流流”。流。流动的方向不

7、同,构成输入动的方向不同,构成输入/输出流,即输出流,即I/OI/O流。流。第10页,本讲稿共43页第8章输入/输出流对象2022/10/711I/OI/O流流 n在在C+C+程序中,数据可以从键盘流入到程序中,数据可以从键盘流入到程序,也可以从程序流向屏幕或磁盘程序,也可以从程序流向屏幕或磁盘文件。从流中获取数据的操作称为提文件。从流中获取数据的操作称为提取操作,向流中添加数据的操作称为取操作,向流中添加数据的操作称为插入操作。数据的输入插入操作。数据的输入/输出就是通过输出就是通过I/OI/O流来实现的。流来实现的。第11页,本讲稿共43页第8章输入/输出流对象2022/10/712I/O

8、I/O流类库的层次结构流类库的层次结构 nC+C+编译系统提供的编译系统提供的I/OI/O流类库含有两流类库含有两个平行基类:个平行基类:nstreambufstreambufniosiosniosios类有类有4 4个直接派生类个直接派生类:n输入流类输入流类istreamistreamn输出流类输出流类ostreamostreamn文件流类文件流类fstreambasefstreambasen串流类串流类strstreambasestrstreambase第12页,本讲稿共43页第8章输入/输出流对象2022/10/713标准输入输出流对象标准输入输出流对象n标准标准I/OI/O流预定义了

9、流预定义了4 4个流类对象:个流类对象:cincin、coutcout、cerrcerr、clogclog。n操作系统给把外设用文件名的方式进操作系统给把外设用文件名的方式进行管理,因此程序设计要访问外设就行管理,因此程序设计要访问外设就跟访问文件一样方便。跟访问文件一样方便。第13页,本讲稿共43页第8章输入/输出流对象2022/10/714nI/OI/O分为无格式支持的低级分为无格式支持的低级I/OI/O和具有和具有格式支持的高级格式支持的高级I/OI/O。n无格式支持的低级无格式支持的低级I/OI/O以基本字节为操以基本字节为操作对象,有格式支持的高级作对象,有格式支持的高级I/OI/O

10、把若干把若干字节组合成有意义的单位,如整数、字节组合成有意义的单位,如整数、浮点数、字符、字符串及用户自定义浮点数、字符、字符串及用户自定义类型等等。类型等等。第14页,本讲稿共43页第8章输入/输出流对象2022/10/715无格式输入无格式输入/输出输出 n无格式输入无格式输入/输出就是按系统预定义的格式进行输出就是按系统预定义的格式进行的输入的输入/输出。输出。n按默认约定,每个按默认约定,每个C+C+程序都能使用标准程序都能使用标准I/OI/O流,如标准输入、标准输出。流,如标准输入、标准输出。ncincin用来处理标准输入,即键盘输入;用来处理标准输入,即键盘输入;coutcout用

11、来处理标准用来处理标准输出,即屏幕输出。它们被定义在输出,即屏幕输出。它们被定义在iostream.hiostream.h头文件头文件中。中。n在使用在使用coutcout和和cincin前,要用编译预处理命令将所使用前,要用编译预处理命令将所使用的头文件包含到源程序中,其格式如下:的头文件包含到源程序中,其格式如下:#include#include 第15页,本讲稿共43页第8章输入/输出流对象2022/10/716无格式输出无格式输出 n“”是预定义的插入运算符,作用在流类对象是预定义的插入运算符,作用在流类对象coutcout上,实现默认格式的屏幕输出。使用上,实现默认格式的屏幕输出。使

12、用coutcout输出输出表达式值到屏幕上的格式如下:表达式值到屏幕上的格式如下:coutE1E2coutE1E2Em;Em;其中,其中,E1E1、E2E2、EmEm为均为表达式。功能是计算各表达为均为表达式。功能是计算各表达式的值,并将结果输出到屏幕当前光标位置处。式的值,并将结果输出到屏幕当前光标位置处。第16页,本讲稿共43页第8章输入/输出流对象2022/10/717无格式输出无格式输出 ncoutcout是是ostreamostream流类的对象,它在流类的对象,它在iostreamiostream头文件中作为全局头文件中作为全局对象定义对象定义,其格式如下,其格式如下:ostrea

13、m cout(stdout);ostream cout(stdout);其中,其中,stdoutstdout表示标准输出设备名(屏幕)。表示标准输出设备名(屏幕)。n在在ostreamostream流类中,对应每个基本数据类型定义运算符流类中,对应每个基本数据类型定义运算符“”重载函数为友元,它们在重载函数为友元,它们在ostreamostream中声明:中声明:ostream&operator(ostream&dest,char*pSource);ostream&operator(ostream&dest,char*pSource);ostream&operator(ostream&dest

14、,int source);ostream&operator(ostream&dest,int source);ostream&operator(ostream&dest,char source);ostream&operator”是预定义的提取运算符,作用在流类对象是预定义的提取运算符,作用在流类对象cincin上,实现上,实现默认格式的键盘输入。使用默认格式的键盘输入。使用cincin将数据输入到变量的格式如下:将数据输入到变量的格式如下:cinV1V2cinV1V2Vn;Vn;其中,其中,V1V1、V2V2、VnVn都是变量。功能是暂停执行程序,等待都是变量。功能是暂停执行程序,等待用户从

15、键盘输入数据,各数据间用空格或用户从键盘输入数据,各数据间用空格或TabTab键分隔,输入数键分隔,输入数据类型要与接受变量类型一致,输完后,按回车键结束。据类型要与接受变量类型一致,输完后,按回车键结束。第18页,本讲稿共43页第8章输入/输出流对象2022/10/719无格式输入无格式输入 ncincin是是istreamistream流类的对象,它在流类的对象,它在iostreamiostream头文件中作头文件中作为全局对象定义,其格式如下:为全局对象定义,其格式如下:istream cin(stdin);istream cin(stdin);n在在istreamistream流类,对

16、应每个基本数据类型定义运算符流类,对应每个基本数据类型定义运算符“”重载函数为友元,它们同样也在重载函数为友元,它们同样也在ostreamostream中中声明:声明:istream&operator(istream&sour,char istream&operator(istream&sour,char*pDes);*pDes);istream&operator(istream&sour,int des);istream&operator(istream&sour,int des);istream&operator(istream&sour,char des);istream&operato

17、r(istream&sour,char des);第19页,本讲稿共43页第8章输入/输出流对象2022/10/720输入输出的格式控制输入输出的格式控制 nC+C+提供了两种格式化输入提供了两种格式化输入/输出方式输出方式:n一种是用一种是用iosios类成员函数进行格式化输入输出类成员函数进行格式化输入输出n另一种是用专门的操作符函数进行格式化输入另一种是用专门的操作符函数进行格式化输入输出输出第20页,本讲稿共43页第8章输入/输出流对象2022/10/721 用用iosios类成员函数格式化类成员函数格式化 niosios类成员函数主要是通过对状态标志、输出类成员函数主要是通过对状态标

18、志、输出宽度、填充字符以及输出精度的操作来完成宽度、填充字符以及输出精度的操作来完成输入输入/输出格式化。输出格式化。n枚举量定义在枚举量定义在iosios类中,因此引用时必须包类中,因此引用时必须包含含ios:ios:前缀。使用时应该全部用符号名,绝不前缀。使用时应该全部用符号名,绝不要用数值。要用数值。n例例8 8-3 示例设置状态标志。示例设置状态标志。第21页,本讲稿共43页第8章输入/输出流对象2022/10/722用用iosios成员函数对状态标志进行操作成员函数对状态标志进行操作 niosios类有类有3 3个成员函数可以对状态标志个成员函数可以对状态标志进行操作,并且定义了一个

19、进行操作,并且定义了一个longlong型数型数据成员记录当前状态标志。这些状态据成员记录当前状态标志。这些状态标志可用位或运算符标志可用位或运算符“|”进行组合。进行组合。n用用 setf setf函数设置状态标志,函数设置状态标志,其一般其一般格式如下:格式如下:long ios:long ios:setfsetf(long flags)(long flags)第22页,本讲稿共43页第8章输入/输出流对象2022/10/723用用iosios成员函数对状态标志进行操作成员函数对状态标志进行操作n清除状态标志清除状态标志用用unsetfunsetf函数清除状态标志,其一般格函数清除状态标志

20、,其一般格式如下:式如下:long ios:long ios:unsetfunsetf(long flags)(long flags)第23页,本讲稿共43页第8章输入/输出流对象2022/10/724用用ios成员函数对状态标志进行操作成员函数对状态标志进行操作n用函数用函数flags取状态标志有两种形式,取状态标志有两种形式,其格式分别如下:其格式分别如下:long ios:flags()long ios:flags(long flag)n例例8-4示例对状态标志的操作。示例对状态标志的操作。第24页,本讲稿共43页第8章输入/输出流对象2022/10/725用用ios成员函数设置输出宽度

21、成员函数设置输出宽度n设置输出宽度函数有两种形式,其格式分别如设置输出宽度函数有两种形式,其格式分别如下:下:int ios:width(int len)int ios:width()n第一种形式是设置输出宽度,并返回原来第一种形式是设置输出宽度,并返回原来的输出宽度;第二种形式是返回当前输出的输出宽度;第二种形式是返回当前输出宽度,输出宽度为宽度,输出宽度为0。第25页,本讲稿共43页第8章输入/输出流对象2022/10/726设置填充字符设置填充字符n填充字符的作用是当输出值不满输出宽度时用填充填充字符的作用是当输出值不满输出宽度时用填充字符来填充,默认填充字符为空格。它与字符来填充,默认

22、填充字符为空格。它与width()函数配合使用,否则没有意义。函数配合使用,否则没有意义。n设置填充字符函数有两种形式,其格式分别如下:设置填充字符函数有两种形式,其格式分别如下:char ios:fill(char ch)char ios:fill()n第一种形式是重新设置填充字符,并返回设置前的填第一种形式是重新设置填充字符,并返回设置前的填充字符;第二种形式是返回当前的填充字符。充字符;第二种形式是返回当前的填充字符。第26页,本讲稿共43页第8章输入/输出流对象2022/10/727设置输出精度设置输出精度 n设置浮点数输出精度有两种形式,其设置浮点数输出精度有两种形式,其格式分别如下

23、:格式分别如下:int ios:precision(int p)int ios:precision()n第一种形式是重新设置输出精度,并第一种形式是重新设置输出精度,并返回设置前的输出精度;第二种形式返回设置前的输出精度;第二种形式是返回当前的输出精度。是返回当前的输出精度。第27页,本讲稿共43页第8章输入/输出流对象2022/10/728n例例8 8-6 示例设置输出宽度、填充字符、示例设置输出宽度、填充字符、输出精度。输出精度。第28页,本讲稿共43页第8章输入/输出流对象2022/10/729用操作符函数格式化用操作符函数格式化 n为了不直接以标志位的方式去处理流的状态,为了不直接以标

24、志位的方式去处理流的状态,c+c+标准库提供了标准的操作符函数专门操控这标准库提供了标准的操作符函数专门操控这些状态。些状态。n这组函数这组函数不属于任何类成员不属于任何类成员,定义在,定义在iomanip.hiomanip.h头文件中。头文件中。n将它们用在提取运算符将它们用在提取运算符“”或插入运算符或插入运算符“”后面来设定输入后面来设定输入/输出格式输出格式,即在读写,即在读写对象之间插入一个修改状态的操作。对象之间插入一个修改状态的操作。n其中有些函数没有参数,所以又叫其中有些函数没有参数,所以又叫操作符操作符。第29页,本讲稿共43页第8章输入/输出流对象2022/10/730n设

25、置输入设置输入/输出宽度函数输出宽度函数setw(int)n设置输出填充字符函数设置输出填充字符函数setfill(int)n设置输出精度函数设置输出精度函数setprecision(int)n设置输入设置输入/输出整型数数制函数输出整型数数制函数dec、hex和和oct n取消输入结束符函数取消输入结束符函数ws n控制换行操作符控制换行操作符endl n代表输出单字符代表输出单字符“0”的操作符的操作符ends第30页,本讲稿共43页第8章输入/输出流对象2022/10/731n例例8 8-7用操作符函数示例设置输入用操作符函数示例设置输入/输出宽度。输出宽度。第31页,本讲稿共43页第8

26、章输入/输出流对象2022/10/732解决问题解决问题nP374-377P374-377第32页,本讲稿共43页第8章输入/输出流对象2022/10/733提出问题提出问题n如何对文本文件和二进制文件进行输如何对文本文件和二进制文件进行输入输出操作?入输出操作?第33页,本讲稿共43页第8章输入/输出流对象2022/10/734 文件的输入/输出 nC+C+把文件看作是一个字符(字节)把文件看作是一个字符(字节)的序列,即由一个个字符(字节)顺的序列,即由一个个字符(字节)顺序组成。序组成。n根据数据的组织形式,可分为根据数据的组织形式,可分为ASCIIASCII码文件码文件和和二进制文件二

27、进制文件。nASCIIASCII码文件又称为文本文件,它的每一个码文件又称为文本文件,它的每一个字节存放一个字节存放一个ASCIIASCII码,代表一个字符。码,代表一个字符。n二进制文件是把内存中的数据按其在内存中二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘文件存放。的存储形式原样输出到磁盘文件存放。第34页,本讲稿共43页第8章输入/输出流对象2022/10/735n由于由于ASCIIASCII码形式与字符一一对应,因码形式与字符一一对应,因此便于对字符进行输出或逐个处理,此便于对字符进行输出或逐个处理,但它要占用较多的存储空间,若存于但它要占用较多的存储空间,若存于二进

28、制文件中,可以节省存储空间,二进制文件中,可以节省存储空间,但不能直接输出字符形式。但不能直接输出字符形式。第35页,本讲稿共43页第8章输入/输出流对象2022/10/736nC+C+有三种文件流类:有三种文件流类:n输入输入/输出文件流类输出文件流类fstreamfstreamn输入文件流类输入文件流类ifstreamifstreamn输出文件流类输出文件流类ofstreamofstreamn它们分别从它们分别从I/OI/O流中的流中的iostreamiostream、istreamistream、ostreamostream流类中派生而来。流类中派生而来。n这些文件流类都定义在这些文件流

29、类都定义在fstream.hfstream.h头文头文件中,因此,要使用文件流类,必须件中,因此,要使用文件流类,必须在程序开始包含该头文件。在程序开始包含该头文件。第36页,本讲稿共43页第8章输入/输出流对象2022/10/737C+中进行文件操作的一般步骤中进行文件操作的一般步骤 n为文件为文件定义定义一个流类对象;一个流类对象;n使用使用open()函数建立(或打开)文件。如果文件函数建立(或打开)文件。如果文件不存在,则建立该文件;如果磁盘上已存在该文不存在,则建立该文件;如果磁盘上已存在该文件,则打开该文件;件,则打开该文件;n进行进行读写读写操作。在建立(或打开)的文件上执行所操

30、作。在建立(或打开)的文件上执行所要求的输入要求的输入/输出操作。一般来说,在内存与外设输出操作。一般来说,在内存与外设的数据传输中,由内存到外设称为输出或写,反的数据传输中,由内存到外设称为输出或写,反之则称为输入或读;之则称为输入或读;n使用使用close()函数关闭文件。当完成操作后,应把打开函数关闭文件。当完成操作后,应把打开的文件关闭,避免误操作。的文件关闭,避免误操作。第37页,本讲稿共43页第8章输入/输出流对象2022/10/738n在在C+中,打开一个文件就是将这个文件中,打开一个文件就是将这个文件与一个流建立关联;关闭一个文件就是取与一个流建立关联;关闭一个文件就是取消这种

31、关联。消这种关联。nopen()函数的原型在函数的原型在fstream.h中定义。另外,中定义。另外,在在fstream、ifstream和和ofstream流类中均有流类中均有定义。其原型为:定义。其原型为:void open(char*filename,int mod,int access);n其中第一个参数是用来传递文件名;第二其中第一个参数是用来传递文件名;第二个参数的值决定文件的使用方式;第三个个参数的值决定文件的使用方式;第三个参数的值决定文件的访问方式。参数的值决定文件的访问方式。第38页,本讲稿共43页第8章输入/输出流对象2022/10/739n打开文件的一般格式如下:打开文

32、件的一般格式如下:.open(,);n关闭文件的一般格式如下:关闭文件的一般格式如下:.close();第39页,本讲稿共43页第8章输入/输出流对象2022/10/740n例例8-14 8-14 示例文件的输入示例文件的输入/输出操作。输出操作。第40页,本讲稿共43页第8章输入/输出流对象2022/10/741解决问题解决问题nP381-384P381-384第41页,本讲稿共43页第8章输入/输出流对象2022/10/742举一反三举一反三第42页,本讲稿共43页第8章输入/输出流对象2022/10/743本章小结本章小结n8.1 8.1 螺旋矩阵的输入输出问题螺旋矩阵的输入输出问题 n8.2 8.2 流流n8.3 8.3 无格式输入无格式输入/输出输出n8.4 8.4 输入输入/输出的格式控制输出的格式控制(重点重点)n8.68.6自定义类型对象的输入输出自定义类型对象的输入输出n8.7 8.7 文件的输入文件的输入/输出问题输出问题第43页,本讲稿共43页

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

当前位置:首页 > 生活休闲 > 资格考试

本站为文档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