




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章 输入输出流,7.1 C+的输入和输出,7.1.1输入输出的含义,从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件。 C+的输入与输出包括三个方面: 标准的输入输出 文件的输入输出 字符串输入输出,7.1.2 C+的I/O对C的发展类型安全和可扩展性,在C+的输入输出中,编译系统对数据类型进行严格的检查,凡是类型不正确的数据都不可能通过编译,因此C+的I/O操作是类型安全(type safe)的。 C+的I/O操作是可扩展的,不仅可以用来输入输出标准类型的数据,也可以用于用户自定义类型的数据。,7.1.3 C+的输入输出流,输入输出是数据传送的过程,数据如流水一样从一处
2、流向另一处。C+形象地将此过程称为流(stream)。 在C+中,输入输出流被定义为类。C+中的I/O库中的类称为流类。用流类定义的对象称为流对象。,1. iostream类库中有关的类,I/O类库中的继承关系,图7.2,图7.3,图7.1,2. 与iostream类库有关的头文件,iostream fstream strstream stdiostream /用于混合使用C和C+的机制时 iomanip,3. 在iostream头文件中定义的流对象,4. 在iostream头文件中重载运算符,在istream和ostream类中分别有一组成员函数对位移运算符“”进行重载,以便能用它输入输出各
3、种标准数据类型的数据。,7.2标准输出流,标准输出流是流向标准输出设备(显示器)的数据。,7.2.1 cout,cerr和clog流,ostream类定义了三个输出流对象: cout cerr clog,1. cout流对象,cout是输出流类ostream的对象, cout是与标准输出设备连接的输出流,插入运算符向输出流发送字符,cout是数据的目的地,插入运算符将信息送到cout。cout一般与标准输出设备(显示器)连接。 cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl时,不论缓冲区是否已满,都立即输出流中所有的数据,然后插入一个换行符,并刷新流
4、(清空缓冲区)。注意如果插入一个换行符n,则只输出换行,而不刷新cout流。,2. cerr流对象,cerr流对象是标准出错流,已被指定为与显示器关联,其作用是向标准出错设备输出有关出错信息。,例7.1,3. clog流对象,clog流对象是标准出错流,已被指定为与显示器关联,其作用是向标准出错设备输出有关出错信息。 clog与cerr的区别:clog中的信息存放在缓冲区中,缓冲区满后或遇endl时向显示器输出;cerr是不经过缓冲区,直接向显示器上输出有关信息。,7.2.2格式输出,格式输出有两种方法: 使用控制符 使用流对象的有关成员函数,1. 使用控制符控制输出格式,例7.2,2. 用流
5、对象的成员函数控制输出格式,例7.3,7.2.3用流成员函数put输出字符,格式:输出流对象.put(ch); 其中ch可以是字符常量或变量。 cout.put(a);,例7.4,7.3标准输入流,标准输入流是从标准输入设备(键盘)流向程序的数据。,7.3.1 cin流,cin是输入流类istream的对象,该流对象进行提取操作,它从输入流中取出数据,数据从提取运算符流进程序。cin一般与标准输入设备(键盘)连接。,例7.5,7.3.2用于字符输入的流成员函数,1. 用get函数读入一个字符 2. 用成员函数getline函数读入一行字符,1. 用get函数读入一个字符,格式: (1)字符变量
6、=输入流对象.get( ); (2)输入流对象.get( ch); (3)输入流对象.get( 字符数组或指针,n,终止符); 作用:从输入流中读取n-1个字符,赋给指定的字符数组,如果在读取-1个字符之前遇到指定的终止字符,则提前结束读取。,例7.6,2. 用成员函数getline函数读入一行字符,格式: 输入流对象. getline( 字符数组或指针,n,终止符); 注意:用getline函数从输入流读取字符时,遇到终止标志字符时结束,指针移到该终止标志字符之后,下一个getline函数将从该终止标志的下一个字符开始接着读入。如果用cin.get函数从输入流读取字符时,遇终止标志字符时停止
7、读取,指针不向后移动,仍然停留在原位置。下一次读取时仍从该终止字符开始。这是getline函数和get函数不同之处。,例7.7,7.3.3 istream类的其他成员函数,1. eof 函数 2. peek函数 3. putback函数 4. ignore函数,1. eof 函数,表示“文件结束”。从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值(表示真),否则为零(假)。,例7.8,2. peek函数,调用形式:c=cin.peek(); 该函数的返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位置,并不后移。如果访问的字符是文件结束符,则函数值是EOF(-
8、1)。,3. putback函数,调用形式为:cin.putback(ch); 作用:将前面用get或getline函数从输入流中读取的字符ch返回到输入流,插入到当前指针位置,以供后面读取。,例7.9,4. ignore函数,调用形式为:cin.ignore(n,终止字符); 作用:跳过输入流中n个字符,或在遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的若干字符)。 注:ignore()相当于ignore(1,EOF),例7.10,7.4文件操作与文件流,用文件流类进行文件I/O操作,主要过程包括: (1)定义一个文件流对象 (2)打开指定文件 (3)在文件流上进行I/O操作 (4
9、)关闭文件,使流与文件脱离联系,7.4.1文件的概念,图7.5,长整数100000,文件,文本文件,二进制文件,7.4.2文件流类与文件流对象,C+在头文件fstream.h中定义了C+的文件流类体系 ,当程序中使用文件时,要包含头文件fstream.h 。,当使用文件时,在程序头有:#include 其中定义了各种文件操作运算符及函数。,7.4.3文件的打开与关闭,打开文件是指在文件读写之前做必要的准备工作(建立文件流对象与磁盘文件的关联;指定文件的工作的方式等)。 关闭文件是指解除该磁盘文件与文件流的关联,原来设置的工作方式也失效。,1. 打开磁盘文件,格式: 文件流对象.open(磁盘文
10、件名 ,打开方式); 或 ofstream outfile(磁盘文件名 ,打开方式);,2. 关闭磁盘文件,格式:流文件对象.close( );,7.4.4对ASCII文件的操作,程序对文本文件的操作与对键盘、显示器的操作比较:,在涉及文本文件的操作时,将输入文件看成键盘,将输出文件看成显示器,格式不变。只需在程序中增加打开与关闭文件的语句。,例7.11,例7.12,例7.13,7.4.5对二进制文件的操作,若在文件的打开方式中没有特别说明,打开的文件均为ASCII码文件,若要打开二进制文件,则要特别说明并用特定的读写函数。,fstream infile,outfile; infile.ope
11、n(“inf1.dat”, ios:in| ios:binary);,outfile.open(“outf1.dat”, ios:out| ios:binary);,文件名,输入方式打开,二进制文件,文件名,输出方式打开,二进制文件,1. 用成员函数read和write读写二进制文件,输入函数: infile.read( char *buffer, int len ),输入文件对象名,数据进入的内存地址,一次读入的字节数,文件,内存,读入,输出函数: outfile.write( const char *buffer, int len),输出文件对象名,要输出的数据在内存中的地址,一次输出的字
12、节数,文件,内存,写出,例7.14,例7.15,2. 与文件指针有关的流成员函数,infile.seekg(int, ios:_dir);,移动的字节数,相对位置,infile.seekg(100, ios:beg);/移动到距文件头100个字节,_dir: beg: 文件头 cur: 当前位置 end: 文件尾,infile.seekg(-100, ios:cur);/移动到距当前位置前100个字节,infile.seekg(-500, ios:end);/移动到距文件尾前500个字节,3. 随机访问二进制数据文件,例7.16,7.5字符串流,字符串流不是以外存文件为输入输出的对象,而以内存
13、中用户定义的字符数组(字符串)为输入输出的对象,即将数据输出到内存中的字符数组,或者从字符数组(字符串)将数据读入。 字符串流也称为内存流。 字符串流也有相应的缓冲区。 字符串流类有istrstream,ostrstream,strstream。 字符串流类没有open成员函数,因此要在建立字符串流对象时通过给定参数来确立字符串流与字符数组的关联。,1. 建立输出字符串流对象,格式: ostrstream:ostrstream(char *buffer,int n,int mode=ios:out) 例如:ostrstream strout(ch1,20);,指定的流缓冲区的大小,2. 建立输入字符串流对象,格式: istrstream:istrstream(char *buffer); istrstream:istrstream(char *buffer,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 衡水市项目融资管理办法
- 裕安区扶贫资产管理办法
- 西安饮用水达标管理办法
- 设备usb接口管理办法
- 证监会现场检查管理办法
- 财务部专项资金管理办法
- 质监局财务管理暂行办法
- 贵州省科普经费管理办法
- 贾汪区职业年金管理办法
- 越西县农村建房管理办法
- 房屋定购协议书8篇
- 2025年北京市海淀区高一(下)期末考试数学试卷(含答案)
- 中式面点师考试试卷及答案
- 论语 学而 教学课件
- 巡察流程培训课件
- 新员工职业发展规划课件
- 二手房基础知识培训
- DB42T 1923-2022 城镇沥青路面冷补沥青混合料施工技术规程
- 【中考真题】2025年北京市中考数学真题(含解析)
- 中国高尿酸血症与痛风诊疗指南(2024年)
- 浙江省台州市2024-2025学年高一下学期6月期末英语试题
评论
0/150
提交评论