第14章 输入/输出流类库.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第14章 输入/输出流类库.ppt》由会员分享,可在线阅读,更多相关《第14章 输入/输出流类库.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第1414章章 输入输入/输出流类库输出流类库输入输入/输出输出:程序与计算机外程序与计算机外设之间的数据交换。设之间的数据交换。输入:程序从外设接收数据。输入:程序从外设接收数据。输出:程序将数据输出到外设。输出:程序将数据输出到外设。C+C+语言本身没有专门的输入语言本身没有专门的输入/输出语句,但输出语句,但C+C+的编译系统的编译系统通常都提供输入通常都提供输入/输出流类库,输出流类库,用于用户输入用于用户输入/输出。输出。14.1 14.1 概述概述14.2 14.2 基本基本I/OI/O流类体系流类体系14.3 14.3 标准设备的输入标准设备的输入/输出输出14.4 14.4
2、重载提取和插入运算符重载提取和插入运算符14.5 14.5 文件文件14.6 14.6 综合应用举例综合应用举例作业:作业:4 4,8 8,1111,121214.1 14.1 概述概述流流数据的输入数据的输入/输出以字节为单位,依次逐个进行。输出以字节为单位,依次逐个进行。数据的字节序列称为数据的字节序列称为字节流字节流,简称,简称流流(Stream)Stream)。按对字节内容按对字节内容的解释方式分,字节流分为的解释方式分,字节流分为字符流字符流(也称文本流也称文本流)和和二进制流二进制流。字字符符流流:将将字字节节流流的的每每个个字字节节按按ASCIIASCII字字符符解解释释。数数据
3、据传传输输时时需需做做转转换换,效效率率较较低低,但但字字符符流流可可直直接接编编辑辑、显显示示或或打打印印,字字符符流文件通行于各类计算机。流文件通行于各类计算机。例例如如intint型型数数值值12345671234567在在内内存存中中占占4 4字字节节,但但输输出出前前要要先先转转换成数值串换成数值串“1234567”“1234567”后,才能输出。反之亦然。后,才能输出。反之亦然。源程序文件和文本文件都是字符流。源程序文件和文本文件都是字符流。二二进进制制流流:将将字字节节流流的的每每个个字字节节按按二二进进制制方方式式解解释释。数数据据传传输输时时不不做做转转换换,效效率率高高,但
4、但异异类类计计算算机机对对数数据据的的二二进进制制存存放放格格式式存在差异,且无法人工阅读,二进制流文件可移植性较差。存在差异,且无法人工阅读,二进制流文件可移植性较差。输入输入/输出流的类体系称为输出流的类体系称为流类流类,流类的实现称为,流类的实现称为流类库流类库。文件文件文件:文件:相关数据的字节序列集合。相关数据的字节序列集合。计算机中的程序、数据、文档常以文件形式存于外存。计算机中的程序、数据、文档常以文件形式存于外存。输入输入/输出设备具有字节流特征,也是文件。例如键盘是输输出设备具有字节流特征,也是文件。例如键盘是输入文件,显示器、打印机是输出文件。入文件,显示器、打印机是输出文
5、件。不同的文件所允许的操作可能不同。例如对于磁盘文件,不同的文件所允许的操作可能不同。例如对于磁盘文件,可以将数据写入文件,也可以将数据从文件中取出;而对可以将数据写入文件,也可以将数据从文件中取出;而对于打印机文件,只能将数据写入,而不能从打印机文件中于打印机文件,只能将数据写入,而不能从打印机文件中取出数据。取出数据。文件名:文件名:为文件取的名字,以区别不同的文件。为文件取的名字,以区别不同的文件。文件名通常由使用标识符,但不同的计算机系统,对文件文件名通常由使用标识符,但不同的计算机系统,对文件名的组成规则有所不同,参见有关操作系统。名的组成规则有所不同,参见有关操作系统。程序可通过文
6、件名来使用文件。程序可通过文件名来使用文件。缓冲缓冲缓冲区:缓冲区:系统在主存中开辟的、用来临时存放输入系统在主存中开辟的、用来临时存放输入/输出数据的输出数据的区域。如先将输入的数据送到缓冲区,再从缓冲区中取出。区域。如先将输入的数据送到缓冲区,再从缓冲区中取出。缓冲区的作用:缓冲区的作用:因输入因输入/输出设备的速度比输出设备的速度比CPUCPU慢得多,若慢得多,若CPUCPU直直接与外设交换数据,必然占用大量接与外设交换数据,必然占用大量CPUCPU时间,降低时间,降低CPUCPU的使用效的使用效率。使用缓冲后,率。使用缓冲后,CPUCPU只要从缓冲区中取数据或者把数据写入只要从缓冲区中
7、取数据或者把数据写入缓冲区,而不必等待外设的具体输入缓冲区,而不必等待外设的具体输入/输出操作,显著提高了输出操作,显著提高了CPUCPU的使用效率。的使用效率。按在缓冲区中是否立即处理,流分为缓冲流和非缓冲流。常用按在缓冲区中是否立即处理,流分为缓冲流和非缓冲流。常用缓冲流,仅在特殊场合,才用非缓冲流。缓冲流,仅在特殊场合,才用非缓冲流。非缓冲流:一旦数据送入缓冲区,立即处理。非缓冲流:一旦数据送入缓冲区,立即处理。缓冲流:仅当缓冲区满或当前送入的数据为新的一行字符缓冲流:仅当缓冲区满或当前送入的数据为新的一行字符时,系统才对流中的数据进行处理时,系统才对流中的数据进行处理(称为刷新称为刷新
8、)。14.2 14.2 基本基本I/OI/O流类体系流类体系概述概述基本基本I/OI/O流类体系:如图所示,流类体系:如图所示,在在iostream.hiostream.h中说明,支持中说明,支持C+C+输入输入/输出程序设计。输出程序设计。类类istreamistream:类类iosios的公有派生类,提供输入操作。的公有派生类,提供输入操作。类类ostreamostream:类类iosios的公有派生类,提供输出操作。的公有派生类,提供输出操作。类类iostreamiostream:由类由类istreamistream和和ostreamostream公有派生,并未增加新成公有派生,并未增加
9、新成员,以支持输入和输出操作。员,以支持输入和输出操作。类类iosios:类类istreamistream和和ostreamostream的虚基类,提供流的格式化输入的虚基类,提供流的格式化输入/输出和错误处理,并通过指向类输出和错误处理,并通过指向类streambufstreambuf的对象的指针成员来的对象的指针成员来管理流缓冲区。管理流缓冲区。类类streambufstreambuf:管理流缓冲区。管理流缓冲区。实际编程时,常用类实际编程时,常用类iosios、istreamistream、ostreamostream和和iostreamiostream提供的提供的公有接口成员函数来输入
10、公有接口成员函数来输入/输出。输出。预定义的标准流与提取和插入运算符预定义的标准流与提取和插入运算符预定义的标准流对象:预定义的标准流对象:cincin、coutcout、cerrcerr和和clogclog。需在程序中包含头文件需在程序中包含头文件“iostream.hiostream.h”方可使用。方可使用。cincin为标准输入流,缺省代表键盘。为标准输入流,缺省代表键盘。coutcout为标准输出流,缺省代表显示器。为标准输出流,缺省代表显示器。cerrcerr和和clogclog为标准错误信息输出流,缺省代表显示器。为标准错误信息输出流,缺省代表显示器。cerrcerr为非缓冲流,其
11、余为缓冲流。为非缓冲流,其余为缓冲流。提取运算符提取运算符:用于从流中提取一个字节序列。:用于从流中提取一个字节序列。插入运算符插入运算符:用于向流中插入一个字节序列。:用于向流中插入一个字节序列。cincin使使用用提提取取运运算算符符实实现现数数据据的的输输入入,其其余余三三个个标标准准流流使使用用插插入入运算符实现数据的输出。运算符实现数据的输出。输输入入流流自自动动将将要要输输入入的的字字节节序序列列形形式式的的数数据据变变换换成成计计算算机机内内部部形形式式的的数数据据(二二进进制制数数或或ASCII)ASCII)后后,再再赋赋给给变变量量,变变换换后后的的格格式式由由变变量量的的类
12、类型型确确定定。输输出出流流自自动动将将要要输输出出的的数数据据变变换换成成字字节节序序列后,送到输出流中。列后,送到输出流中。例例14.1 14.1 使用流使用流cerrcerr和和clogclog实现数据的输出。实现数据的输出。#includeinclude void void main(voidmain(void)float float a,ba,b;cerrcerrab;ab;if(bif(b!=0)!=0)coutcouta/b=a/bn;a/b=a/bn;else else cerrcerr除数为零!除数为零!n;n;coutcout、cerrcerr和和clogclog的用法相同
13、但作用不同。的用法相同但作用不同。coutcout的输出可重定向的输出可重定向(请参见有关操作系统的介绍请参见有关操作系统的介绍)。cerrcerr和和clogclog的输出不可重定向。的输出不可重定向。clogclog为缓冲流,输出的数据不能及时显示。为缓冲流,输出的数据不能及时显示。通通常常将将程程序序中中的的提提示示信信息息(输输入入提提示示和和出出错错提提示示等等)用用cerrcerr输输出出,结果数据用结果数据用coutcout输出,而输出,而clogclog很少使用。很少使用。流的格式控制流的格式控制格式化输入格式化输入/输输出仅用于文本流出仅用于文本流,而二进制流是原而二进制流是
14、原样输入输出,不样输入输出,不必做格式化转换。必做格式化转换。“iomanip.hiomanip.h”中预定义了中预定义了1313个个格式控制函数,格式控制函数,用于控制输入用于控制输入/输出数据的格式,输出数据的格式,如下表所示。如下表所示。格式控制函数名 功能 用于dec设置为十进制I/O hex设置为十六进制I/O oct设置为八进制I/O ws提取空白字符Iendl插入一个换行符Oflush刷新流Oresetioflags(long)取消指定的标志I/Osetioflags(long)设置指定的标志I/Osetfill(int)设置填充空位的字符Osetprecision(int)设置
15、实数的精度Osetw(int)设置输出数据的宽度Oends插入字符串结束标志例例14.2 14.2 用格式控制函数指定输出数据的域宽和数制。用格式控制函数指定输出数据的域宽和数制。#includeinclude#include#include void void main(voidmain(void)intint a=256,b=128;a=256,b=128;coutcout setw(8)setw(8)ab=bn;ab=bn;coutcout hex hex ab=ab=decdec bn;bn;指定变量指定变量a a按十六进制输出,按十六进制输出,b b按十进制按十进制输出。输出。注意,
16、注意,hexhex、decdec、octoct的设置是互斥的,的设置是互斥的,一旦设置,一直有效,直到下一次设置一旦设置,一直有效,直到下一次设置数制为止。数制为止。指定输出变量指定输出变量a a的域宽为的域宽为8 8,变量,变量b b仍按缺省的域宽输出。仍按缺省的域宽输出。注意,注意,setwsetw设置的域宽仅对其后设置的域宽仅对其后的一次插入有效。的一次插入有效。流的错误处理流的错误处理 statestate是是类类iosios中中说说明明的的整整型型数数据据成成员员,用用于于记记录录输输入入/输输出出操操作作的的状状态态,它它的的有有关关二二进进制制位位的的含含义义由由iosios类类
17、中中说说明明的的公公有有枚枚举举类类型型io_stateio_state声明的枚举常量来描述。声明的枚举常量来描述。公有枚举类型公有枚举类型io_stateio_state的声明:的声明:enumenum io_stateio_state goodbitgoodbit=0 x00,/=0 x00,/输入输入/输出操作正常输出操作正常 eofbiteofbit =0 x01,/=0 x01,/已到达文件尾已到达文件尾 failbitfailbit=0 x02,/=0 x02,/输入输入/输出操作出错输出操作出错 badbitbadbit =0 x04,/=0 x04,/非法输入非法输入/输出操作
18、输出操作 hardfailhardfail=0 x80 /=0 x80 /无法恢复的错误无法恢复的错误 ;类类iosios中读取中读取I/OI/O状态的成员函数:状态的成员函数:intint rdstaterdstate();/();/读取读取I/OI/O状态字。状态字。intint bad();/bad();/若非法操作,返回非零,否则返回若非法操作,返回非零,否则返回0 0。void void clear(intclear(int=0);/=0);/清除流中的错误,参数缺省值为清除流中的错误,参数缺省值为0 0。intint eofeof();/();/若到文件尾,返回非零,否则返回若到文
19、件尾,返回非零,否则返回0 0。intint fail();/fail();/若若I/OI/O错,返回非零,否则返回错,返回非零,否则返回0 0。intint good();/good();/若若I/OI/O正常,返回非零,否则返回正常,返回非零,否则返回0 0。若仅清除输入流状态字中的某位,可用若仅清除输入流状态字中的某位,可用clear()clear()函数。如:函数。如:cin.clear(cin.rdstatecin.clear(cin.rdstate()&()&ios:badbitios:badbit););将将输输入入流流中中的的非非法法输输入入/输输出出操操作作位位置置为为0 0
20、。若若要要将将输输入入流流中中的的非法输入非法输入/输出操作位置为输出操作位置为1 1,则为:,则为:cin.clear(cin.rdstatecin.clear(cin.rdstate()|()|ios:badbitios:badbit););在在I I/O O操操作作后后,应应检检测测是是否否发发生生I I/O O错错误误。若若发发生生I I/O O错错误误,则则应应在在处处理理错错误误之之后后,清清除除流流中中的的错错误误标标志志,以以便便进进行行后后续续I I/O O操操作作。但对但对I I/O O错误处理不当可能导致程序不能正常运行。错误处理不当可能导致程序不能正常运行。例例14.3
21、 14.3 输入不正确的数据时,导致程序出错。输入不正确的数据时,导致程序出错。#includeinclude void void main(voidmain(void)intint i,si,s;coutcouti;i;s=s=cin.rdstatecin.rdstate();();coutcouts=sn;s=sn;while(swhile(s)cin.clearcin.clear()();/L/L coutcouti;i;s=s=cin.rdstatecin.rdstate();();coutcoutnum=in;num=i”“”运算符实现。运算符实现。基本类型数据的输出由类基本类型数据
22、的输出由类ostreamostream多次重载多次重载“”“”运算符实现。运算符实现。基本类型数据的输入基本类型数据的输入使用使用cincin输入基本类型的数据时应注意:输入基本类型的数据时应注意:当当用用户户输输入入的的数数据据送送到到缓缓冲冲区区中中,仅仅当当输输入入一一行行的的结结束束符符(EnterEnter键键)时时,才才提提取取数数据据;只只有有把把输输入入缓缓冲冲区区中中的的数数据据提提取完后,才开始新的输入。取完后,才开始新的输入。在在缺缺省省情情况况下下,空空格格作作为为输输入入数数据据之之间间的的分分格格符符,在在输输入入的的数数据据之之间间可可以以用用一一个个或或多多个个
23、空空格格分分开开。但但输输入入字字符符给给字字符符变量时,空格算字符。变量时,空格算字符。输输入入数数据据的的类类型型必必须须与与提提取取数数据据的的变变量量类类型型一一致致,否否则则会会出出现现错错误误。若若程程序序中中没没有有相相应应的的出出错错处处理理程程序序,则则导导致致计计算算结果不正确。结果不正确。在在输输入入数数据据时时,换换行行符符(EnterEnter键键)有有两两个个作作用用:一一是是,告告知知系系统统,输输入入到到缓缓冲冲区区中中的的数数据据可可以以提提取取;二二是是,从从输输入入流流中中提取数据时,作为空格字符处理。提取数据时,作为空格字符处理。字符和字符串的输入字符和
24、字符串的输入输入字符的成员函数:输入字符的成员函数:int istream:get();/提取一个字符,并作为返回值。提取一个字符,并作为返回值。常用。常用。istream&istream:get(char&);istream&istream:get(unsigned char&);istream&istream:get(signed char&);输入字符串的成员函数:输入字符串的成员函数:istream&istream:get(char*,int,char=n);istream&istream:get(unsigned char*,int,char=n);istream&istream:g
25、et(signed char*,int,char=n);功功能能:从从输输入入流流提提取取一一个个字字符符串串(但但不不提提取取结结束束字字符符),并并复复制制到到第第一一个个参参数数所所指指存存储储区区。其其中中,第第二二个个参参数数为为至至多多提提取取的的字字符符个个数数(指指定定值值为为n n时时,至至多多提提取取n-1n-1个个字字符符,尾尾部部增增加加一一个个字字符符串串结结束束符符0)0),第第三三个个参参数数为为输输入入字字符符串串的的结结束束字字符符(缺缺省省值为换行符值为换行符)。这三个函数并不常用。这三个函数并不常用。提取一个字符,提取一个字符,并赋给字符型并赋给字符型引用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第14章 输入输出流类库 14 输入 输出 流类库
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内