第8章输入与输出

上传人:无*** 文档编号:171923278 上传时间:2022-11-29 格式:PPT 页数:36 大小:172.52KB
收藏 版权申诉 举报 下载
第8章输入与输出_第1页
第1页 / 共36页
第8章输入与输出_第2页
第2页 / 共36页
第8章输入与输出_第3页
第3页 / 共36页
资源描述:

《第8章输入与输出》由会员分享,可在线阅读,更多相关《第8章输入与输出(36页珍藏版)》请在装配图网上搜索。

1、第第8 8章章 C+C+的输入和输出的输入和输出 8.1 C+的输入和输出 8.2 标准输出流 8.3 标准输入流 8.4 文件操作与文件流NextNextNext8.1 8.1 C+C+的输入和输出的输入和输出8.1.1 8.1.1 输入输出的含义输入输出的含义 1)对系统指定的标准设备的输入输出,对系统指定的标准设备的输入输出,称为称为标准输入输出标准输入输出。2)以外存文件为对象的输入输出称为)以外存文件为对象的输入输出称为文文件的输入输出件的输入输出。3)对内存空间进行输入输出称为)对内存空间进行输入输出称为字符串字符串输入输出输入输出。BackBackBackNextNextNext

2、 因为在因为在C+中用户需要定义众多的自中用户需要定义众多的自定义类型,但是定义类型,但是C语言的输入输出系统不语言的输入输出系统不支持用户自定义的类型。请看下面的类支持用户自定义的类型。请看下面的类:class my_class int i;float f;char*str;obj;NextNextNextBackBackBack对此类类型,在对此类类型,在C语言中下面的语句是不语言中下面的语句是不能接受的能接受的:printfprintf(%my_classmy_class,objobj););C+C+的流类比的流类比C C的输入输出函数具有更的输入输出函数具有更大的优越性。可以重载,使成

3、立大的优越性。可以重载,使成立:coutcout objobj;NextNextNextBackBackBack8.1.2 C+8.1.2 C+的输入输出流的输入输出流v 输入和输出是数据传输的过程,称之为输入和输出是数据传输的过程,称之为流。流。v C+C+的输入输出流是指若干字节组成的的输入输出流是指若干字节组成的字节序列字节序列v C+C+中输入输出流被定义为类。中输入输出流被定义为类。v 在在C+C+中,流类是为输入输出提供的一中,流类是为输入输出提供的一组类,它们都放在流库中。组类,它们都放在流库中。NextNextNextBackBackBackv流总是与某一设备相联系的(例如键盘

4、、流总是与某一设备相联系的(例如键盘、屏幕或硬盘等),通过使用流类中定义屏幕或硬盘等),通过使用流类中定义的方法,就可以完成对这些设备的输入的方法,就可以完成对这些设备的输入输出操作。输出操作。v流具有方向性流具有方向性:与输入设备与输入设备(如键盘如键盘)相联相联系的流称为输入流系的流称为输入流;与输出设备与输出设备(如屏幕如屏幕)相联系的流称为输出流相联系的流称为输出流;与输入输出设备与输入输出设备(如磁盘如磁盘)相联系的流称为输入输出流。相联系的流称为输入输出流。NextNextNextBackBackBack C+C+中包含几个预定义的流对象中包含几个预定义的流对象:标准输入流标准输入

5、流 cin 与标准输入设备相关联与标准输入设备相关联 标准输出流标准输出流 cout 与标准输出设备相关联与标准输出设备相关联 非缓冲型的非缓冲型的 cerr 与标准错误输出设备与标准错误输出设备 标准出错流标准出错流 相关联相关联(非缓冲方式非缓冲方式)缓冲型的缓冲型的 clog 与标准错误输出设备与标准错误输出设备 标准出错流标准出错流 相关联相关联(缓冲方式缓冲方式)在缺省情况下,指定的标准输出设备是屏幕,在缺省情况下,指定的标准输出设备是屏幕,标准输入设备是键盘标准输入设备是键盘NextNextNextBackBackBack8.1.3 流类库(iostream类库)uC+C+流类库具

6、有两个平行的基类,即流类库具有两个平行的基类,即streambuf类和类和ios类,所有其他的流类都是从类,所有其他的流类都是从它们直接或间接地派生出来的,其中它们直接或间接地派生出来的,其中:iosios类为输入输出操作在用户一方的接口,负类为输入输出操作在用户一方的接口,负责高层操作责高层操作:streambufstreambuf类为输入输出操作在物理设备一方类为输入输出操作在物理设备一方的接口,负责低层操作。的接口,负责低层操作。NextNextNextBackBackBackiosistreamostreamiostreamofstreamfstreamifstreamIos类的派生关

7、系类的派生关系(P223)NextNextNextBackBackBack8.1.4 8.1.4 与与iostreamiostream类库有关的头文件类库有关的头文件 iostream.h 包含了对输入输出流操作所需的基本信息。fstream.h 用户管理的文件的I/O操作 strstream.h字符串流I/O stdiostream.h用于混合使用C和 C+Iomanip.h使用格式化 I/O时应包含它NextNextNextBackBackBack8.2 8.2 标准输出流标准输出流8.2.1 8.2.1 coutcout、cerrcerr、和、和clogclog流流1 1、coutcou

8、t流对象流对象coutcout是一个类对象,如是一个类对象,如cout.putcout.put()()用用coutcout输出数据时,不必考虑数据输出数据时,不必考虑数据类型类型coutcout流在内存中开辟了一个缓存区,存流在内存中开辟了一个缓存区,存放流中数据,遇到放流中数据,遇到endlendl立即输出,插入立即输出,插入一个换行符,并刷新缓存。一个换行符,并刷新缓存。NextNextNext BackBackBackIostreamIostream中只对和运算符用于中只对和运算符用于标准数据类型时重载了。标准数据类型时重载了。其它类型要用其它类型要用户自己重载户自己重载2、cerr流对

9、象流对象cerr流对象是标准出错流。用于向标准流对象是标准出错流。用于向标准出错设备输出有关信息。出错设备输出有关信息。cout流也可以重定向到磁盘,但流也可以重定向到磁盘,但cerr中中的信息则只能输出到显示器。的信息则只能输出到显示器。当需要出错信息只出现在显示器上时可当需要出错信息只出现在显示器上时可用用cerr流对象。流对象。例8.1对于一元二次方程,当0时应报出错信息。NextNextNextBackBackBack3、clog流对象流对象clog也是标准出错流。也是标准出错流。cerr不经缓冲区,直接输出到显示器,不经缓冲区,直接输出到显示器,clog要存放到缓冲区中直到满或要存放

10、到缓冲区中直到满或endl。NextNextNextBackBackBack8.2.2 8.2.2 格式化输入输出格式化输入输出 u C+提供了两种进行格式控制的方法:提供了两种进行格式控制的方法:1.使用称为控制符的特殊类型的函数进行使用称为控制符的特殊类型的函数进行格式控制。格式控制。例例8.2NextNextNextBackBackBackC+提供的预定义操纵符如下提供的预定义操纵符如下:(1)dec 以十进制形式输入或输出整型数,以十进制形式输入或输出整型数,可用于输入或输出。可用于输入或输出。(2)hex 以十六进制形式输入或输出整型数,以十六进制形式输入或输出整型数,可用于输入或输

11、出。可用于输入或输出。(3)oct 以八进制形式输入或输出整型数,以八进制形式输入或输出整型数,可用于输入或输出。可用于输入或输出。NextNextNextBackBackBack(4)ws 用于在输入时跳过前导的空白符,用于在输入时跳过前导的空白符,可用于输入。可用于输入。(5)endl 插入一个换行符并刷新输出流,插入一个换行符并刷新输出流,仅用于输出。仅用于输出。(6)ends 插入一个空字符插入一个空字符0,通常用来,通常用来结束一个字符串,仅用于输出结束一个字符串,仅用于输出(7)flush 刷新一个输出流,仅用于输出刷新一个输出流,仅用于输出.(8)setbase(int n)设置

12、转换基格式为设置转换基格式为为为n(n的取值为的取值为0、8、10 或或16),n的缺的缺省值为省值为0,即表示采用十进制,仅用于输,即表示采用十进制,仅用于输出。出。(9)resetiosflags(long f)关闭由参数关闭由参数f指定的指定的格式标志,可用于输入或输出格式标志,可用于输入或输出(10)setiosflags(long f)设置由参数设置由参数f指定指定的格式标志,可用于输入或输出的格式标志,可用于输入或输出NextNextNextBackBackBack(11)setfill(int ch)设置设置ch为填充字符,为填充字符,缺省时为空格缺省时为空格,可用于输入或输出可

13、用于输入或输出(12)setprecision(int n)设置小数部分的设置小数部分的位数位数,可用于输入或输出可用于输入或输出(13)setw(int n)设置域宽为设置域宽为n,可用于,可用于输入或输出。输入或输出。2.使用使用ios类流对象的成员函数进行格式类流对象的成员函数进行格式控制;控制;通过调用通过调用cout中的相关成员函数来中的相关成员函数来控制输出格式。控制输出格式。见表见表7.4(p229)setf和和setiosflags括号中的参数表示格式括号中的参数表示格式状态,通过格式标志指定。状态,通过格式标志指定。在在ios类的类的public部分定义了一个格式标部分定义了

14、一个格式标志的枚举。志的枚举。见表见表7.5例例8.3NextNextNextBackBackBack用流成员函数用流成员函数put输出字符输出字符Cout流在内存中有相应的缓冲区。流在内存中有相应的缓冲区。put为专用于输出单个字符的函数。参为专用于输出单个字符的函数。参数为字符或数为字符或ASC码。如:码。如:cout.put(a);或 cout.put(97);例8.4 NextNextNextBackBackBack8.38.3标准输入流标准输入流8.3.18.3.1cincin流流cin是个类对象,从标准输入设备获取数是个类对象,从标准输入设备获取数据。据。在回车键后,才进入键盘缓冲

15、区,形成在回车键后,才进入键盘缓冲区,形成输入流,运算符才能从中提取数据。输入流,运算符才能从中提取数据。遇到无效数据或文件结束符时,遇到无效数据或文件结束符时,cin处于处于出错状态。出错状态。例例7.5NextNextNextBackBackBack8.3.2用于字符输入的流成员函数用于字符输入的流成员函数1.1.用用get读入一个字符读入一个字符不带参数时:不带参数时:cin.get();返回值即为返回值即为读取的读取的字符。字符。带一个参数:cin.get(ch);读取的字符赋读取的字符赋给给ch 三个参数时:cin.get(字符数组,字符个数,终止字符);读取读取n-1个字符,或见终

16、止符停止,个字符,或见终止符停止,并赋给指定字符数组。并赋给指定字符数组。例7.6NextNextNextBackBackBack2.用成员用成员getline读入一行字符读入一行字符cin.getline(字符数组或字符指针,字符数组或字符指针,字符个数字符个数n n,终止标志字符终止标志字符);作用是从输入流中读取一行字符,用法作用是从输入流中读取一行字符,用法与带个参数的与带个参数的get函数类似。函数类似。例例7.7NextNextNextBackBackBack8.48.4文件操作与文件流文件操作与文件流8.4.18.4.1文件的概念文件的概念磁盘文件与数据文件之分,程序中输入输出的

17、对象是程序文件。数据文件分为ASC文件和二进制文件。如 long int 100000 按二进制占4字节,按 ASC格式则占6个字节。C+可以把若干字节整合为类型数据,再以ASC字符形式输出。NextNextNextBackBackBack 8.4.28.4.2文件流类与文件流对象文件流类与文件流对象文件流是以外存文件为输入输出对象的数文件流是以外存文件为输入输出对象的数据流。据流。都有内存缓冲区对应都有内存缓冲区对应三个文件类:三个文件类:1.ifstream 用于从磁盘文件输入用于从磁盘文件输入2.ofstream用于向磁盘文件输出用于向磁盘文件输出3.fstream用于对磁盘文件输入输出

18、用于对磁盘文件输入输出要以磁盘文件为对象的输入输出,必需用要以磁盘文件为对象的输入输出,必需用到文件流类的对象,到文件流类的对象,如:ofstream outfile;NextNextNextBackBackBack8.4.38.4.3文件的打开与关闭文件的打开与关闭一、打开磁盘文件一、打开磁盘文件1.建立文件流对象与磁盘文件的关联。建立文件流对象与磁盘文件的关联。2.指定文件工作方式:输入或输出、指定文件工作方式:输入或输出、ASC或二进制或二进制二种实现方法:二种实现方法:调用流文件成员函数调用流文件成员函数openopen如如:ofstream outfile;outfile.open(

19、“f1.dat”,ios:out);f1.dat为指定的文件名为指定的文件名NextNextNextBackBackBack 定义文件流时指定参数定义文件流时指定参数如:如:ostream outfile(“f1.dat”,iso:out);iso:out 为输入方式(见表为输入方式(见表7.6)P245二、关闭磁盘文件二、关闭磁盘文件 读写操作完成后关闭文件。读写操作完成后关闭文件。如:如:outfile.close();NextNextNextBackBackBack二种方法:1.用流插入提取运算符和输入输用流插入提取运算符和输入输出标准类型的数据。出标准类型的数据。2.用文件流的用文件流

20、的put,get,getline等进行字符的等进行字符的输入输出。输入输出。例7.11 向磁盘文件f1.dat写入一个数组 例7.12从f1.dat读入一个数组 8.4.4 8.4.4 对对ASCASC文件的操作文件的操作NextNextNextBackBackBack8.4.58.4.5 对二进制文件的操作对二进制文件的操作 二进制文件是将内存数据不加转换地二进制文件是将内存数据不加转换地传送到磁盘文件,因此又称内存映像传送到磁盘文件,因此又称内存映像文件。文件。打开文件时要用打开文件时要用ios:binary指定。指定。二进制文件可同时指定为输入与输出二进制文件可同时指定为输入与输出文件。

21、文件。NextNextNextBackBackBack1.1.用成员用成员read和和write读写二进制文件:读写二进制文件:istream&read(char*buffer,int len);ostream&write(char*buffer,int len);例例7.14以二进制形式存入磁盘文件以二进制形式存入磁盘文件例例7.15读入二进制形式的磁盘文件读入二进制形式的磁盘文件2.与文件指针有关的流成员函数与文件指针有关的流成员函数(表表7.7P254)表中函数带表中函数带g g的是用于输出的函数;带的是用于输出的函数;带p p的是用于输入的函数。的是用于输入的函数。文件的位置和偏移量等

22、参数为文件的位置和偏移量等参数为longlong型型整数,以字节为单位。整数,以字节为单位。3.3.随机访问二进制数据文件随机访问二进制数据文件例:例:7.167.16NextNextNextBackBackBack成员函数成员函数作用作用gcount()返回最后读入的字节数tellg()返回输入文件指针当前位置seekg(文件中的位置)把输入文件指针移到指定位置seekg(位移量,参照位置)移动指针tellp()返回输入文件指针当前位置seekp(文件中的位置)把输入文件指针移到指定位置seekp(位移量,参照位置)移动指针表表7.7文件流与文件指针有关的流成员函数文件流与文件指针有关的流成

23、员函数BackBackBack8.5 8.5 字符串流字符串流 字符串流不是以外存文件为输入输出对字符串流不是以外存文件为输入输出对象,而是以内存中用户定义的字符数组象,而是以内存中用户定义的字符数组为输入输出对象。为输入输出对象。也称内存流也称内存流字符串流也有相应的缓冲区。字符串流也有相应的缓冲区。字符串流还可存放其它类型数据,但要字符串流还可存放其它类型数据,但要先将其转换为先将其转换为ASC码。码。字符串流关联的只是内存中的一个字符字符串流关联的只是内存中的一个字符数组,因此不用打开和关闭文件。数组,因此不用打开和关闭文件。用户要自己指定一个结束标志符。用户要自己指定一个结束标志符。N

24、extNextNextBackBackBack1.建立输出字符串流对象构造函数原型为:构造函数原型为:ostrstream:ostrstream(char*buffer,int n,int mode=ios:out);如:ostrstream str(ch1,20);2.建立输入字符串流对象建立输入字符串流对象 有二个带参数的构造函数:有二个带参数的构造函数:istrstream:istrstream(char*buffer);istrstream:istrstream(char*buffer,int n int);NextNextNextBackBackBack3.建立输入输出字符串流对象建立输入输出字符串流对象构造函数原型:构造函数原型:strstream:strstream(char*buffer,int n,int mode);例例8.17将一数组保存在字符数组中将一数组保存在字符数组中例例8.18在一字符数组在一字符数组c中有中有10个整数,以个整数,以空格相间,要求将其放到整型数组中,空格相间,要求将其放到整型数组中,并排序放入并排序放入c中。中。NextNextNextBackBackBack

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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