




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、,第八章 C+ I/O流标准库,本章内容,I/O流概述 流的输入和输出操作 格式化输入输出,教学重点:,掌握对文本文件的打开和关闭操作; 掌握流插入运算符()和输入流类成员函数get(),getline()的使用;,一、 C+ I/O流概述,I/O流:数据在外部设备和内存之间的流动 输入流:由外部设备流向内存的数据流。从输入流中获取数据的操作称为输入、读或提取操作。 输出流:由内存流向外部设备的数据流。将数据放入输出流的操作称为输出、写或插入操作。,内存,x,y,2,3,cinxy;,3 2,3 2,输出设备,输入设备,屏幕,磁盘文件,键盘,磁盘文件,1. 程序中的输入/输出操作,coutxy
2、;,一、 C+ I/O流概述,2.C+ I/O流类库 C+系统提供的完成I/O操作的一组类。主要包括: 标准流类:处理与标准输入设备(键盘)和输出设备(显示器)关联的数据流 文件流类:处理与磁盘文件关联的数据流 字符串流类:利用内存中的字符数组处理数据的输入输出 异常类等:处理异常错误,常用I/O流类列表,fstream.h,输入/输出文件流类,fstream,iostream.h,通用输入/输出流类和其他输入/输出流的基类,iostream,fstream.h,输出文件流类,ofstream,fstream.h,输入文件流类,ifstream,iostream.h,通用输出流类和其他输出流类
3、的基类,istream,iostream.h,流的抽象基类,ios,包含文件,说 明,类 名,ostream,通用输入流类和其他输入流的基类,iostream.h,3.使用I/O流的基本步骤 声明I/O流类的对象,以指明程序中所使用的I/O流类型。 将I/O流类的对象与具体的设备关联以指定完成操作的具体设备。 选取适当的I/O操作方法来实现数据的读写。,1. 使用的类 istream、 ostream、iostream 2. 需要的头文件 iostream.h 3.C+中已预定义的标准I/O流类对象 cin:istream 类的对象,处理标准输入设备的输入。 cout:ostream 类的对象
4、,处理标准输出设备的输出。 cerr:ostream 类的对象,处理在标准输出设备上输出 错误信息(非缓冲)。 clog:ostream 类的对象,处理在标准输出设备上输出 错误信息(缓冲)。,二、标准 I/O流的使用,4.输入输出方法 1)使用C+已重载的通用流运算符 (提取运算符):输入,从流中获取数据到内存。 (插入运算符):输出,将内存数据添加到流中输出。 注意: C+已重载的通用流运算符只能处理基本的数据类型的数据,如果要处理自定义的类型数据需要用户来重载 2)使用I/O流类的成员函数,二、标准 I/O流的使用,5.常用的输出流成员函数 (1)put函数 该函数的用法是: 输出流对象
5、名.put(ch) 该函数仅输出存储在ch中的一个字符,且返回当前输出流对象。 例如:cout.put(A).put(t);/屏幕输出:At,二、标准 I/O流的使用,5.常用的输出流成员函数 (2)write函数 该函数的用法是: 输出流对象名.write(s,n) 该函数输出字符指针s与所指向的字符串中的n个字符。当s所指字符串不足n时补空格,返回当前输出流对象。 例1: cout.write(12345,3).write(ABCDE,7).put(t); 输出结果为: 123ABCDE t 例2: int a5=1,2,3,4,5; cout.write(char *)a,sizeof(
6、a); cout.write(char *) 输出结果为:,二、标准 I/O流的使用,5.常用的输入流成员函数,二、标准 I/O流的使用,格式1:输入流对象名.get(), 功能:从输入流中读取一个字符(包括空白符),并将该字符作为函数返回值,若遇流结束符,返回EOF。 其中:空白符指的是空格符制表符换行符以及转义字符 流结束符是指:ctrl+z 例:char c; c=cin.get();,1)使用get()函数读入字符数据,1)使用函数get() 读入字符数据,格式2:输入流对象名.get(c) 功能:从输入流中读取一个字符(包括空白符)赋给字符变量c,若遇文件结束符,返回0,否则返回非0
7、。 例:char c; cin.get(c);,1)使用函数get() 读入字符数据,格式3:输入流对象名.get(s,n,终止字符); 功能:从输入流读取n-1个字符,并在其后加入0,存放在由s指向的内存空间。若遇终止字符或流结束符则提前结束读操作。终止字符的缺省值为n 。 返回值: 调用该函数的输入流对象。,例8-3:get函数使用示例,2)使用getline()读入字符串。,功能: 从输入流读取n-1个字符,在其后加入0,存放在由字符指针s指向的内存空间。若遇终止字符或流结束符则提前结束读操作。终止字符的缺省值为n 。 返回值:调用该函数的输入流对象,调用形式为: 输入流对象.getli
8、ne(字符指针s,字符个数n,终止字符);,例8-4:与getline输入的区别,例:get与getline输入的区别,使用get,使用getline,执行,执行,与带三个参数的get()的差别是:在遇到终止字符时,get()使读指针停在终止字符处,而getline()将读指针移到终止字符的下一个位置。,例:文件示例,执行,Data.txt,三、文件I/O流的使用,(2)文件结构:C+把每个文件都看成是一个有序的字节序列,每个文件都以文件结束符标志文件的结束。例如:,(1)文件: 存储在外部设备上的数据。用于长期保存数据。,三、文件I/O流的使用,1.磁盘文件简介,(3)文件格式 文本文件:数
9、值和字符均按ASCII码格式存储 例如,数字3.141存储时占5个字节。 00110011 00101110 00110001 00110100 00110001 二进制文件:字符按ASCII码存储,数值按内部形式存储 例如,数字3.141存储时占4个字节。 01000000 01001001 00001111 11010000 文本文件可以用文本编辑器打开查看便于阅读,读写时需要进行格式转换;二进制文件用文本编辑器打开时看到的是乱码,不便于阅读;读写时不需要格式转换,效率高。,三、文件I/O流的使用,示例,示例,(4)文件的读写方式,随机方式:在文件的任何位置进行读或写。,读/写指针,顺序方
10、式:按数据在文件中的物理排列顺序依次读或写。,注意:在C+中,文本文件只能以顺序方式读写;二进制文件既可以顺序方式读写也可以二进制方式读写。,2. 文件的使用 定义文件流对象 打开文件用于读和写 检查打开是否成功 读或写数据 使用完文件后要关闭文件 3.文件流使用的类和头文件 类:ifstream、ofstream、fstream 头文件:fstream.h,四、 文件输出流,定义文件输出流对象 当在程序中要将数据写入一个磁盘文件时,需要先定义一个ofstream类的对象(输出流对象)并与该文件关联。 方法主要有两种:,方法1: 先定义输出流类对象, 再调用open成员函数打开文件,例:ofs
11、tream outfile; /建立文件输出流类对象 outfile.open(“datal.txt”,ios:out); /打开文件,方法2: 在定义输出流类对象时打开相关联的文件,例:ofstream outfile (“datal.txt”,ios:out);,四、输出流,2. 文件打开成功与否的判断方法 打开文件失败,对象取值为0;成功则为非0。 3.使用完文件后应该关闭文件,方法是: 文件流对象.close();,四、输出流,4.向输出流插入数据的方法 1)使用重载的流插入运算符()输出各种数据 2)使用输出流类成员函数put()输出一个字符。 3)使用输出流类成员函数write()
12、以二进制形式输出数据。,例1 使用向文本文件写入数据,执行,test1.txt,例2:put函数使用示例,执行,file1.txt,file2.txt,例3 使用write()向二进制文件写入数值数据。, 使用write()写入数值数据,一定是二进制文件,用文本编辑器打开时看到的是乱码。,执行,test3,五、文件输入流,定义文件输入流对象 从一个磁盘文件输入数据前,需要定义一个ifstream类的对象(输入流对象)与该文件关联。方法主要有两种:,方法1: 先定义文件对象,然后调用open成员函数打开文件,例:ifstream infile; /声明文件输入流对象 infile.open(“d
13、ata1.txt”,ios:in); /打开文件,使流对象与文件建立联系,方法1: 在定义文件对象时打开相关联的文件,例:ifstream infile (“data1.txt”,ios:in);,五、文件输入流,2.从输入流提取数据的方法 1)使用重载的流提取运算符()输入各种数据 2)使用输入流类成员函数get()输入字符数据。 3)使用输入流类成员函数getline()输入字符数据 4)使用输入流类成员函数read()从二进制文件读入数据,3. 判断到达文件尾的方法 利用输入流成员函数eof( ) 如果到达文件尾,没有可读的内容,返回非0,否则返回0 利用get函数的返回值是否是EOF来
14、判断 利用提取运算符 提取数据,如果没有内容可读返回 0,否则返回非0,五、文件输入流,例1 使用提取运算符()从文本文件读数据。,执行,例2 使用成员函数getline()从文本文件读数据。,例3 利用读取文件中的数值数据示例。,执行,test.txt,例4: get函数使用示例。,执行,file1.txt,file2.txt,4)使用输入流类成员函数read() 读取数据。, 该函数主要用于对二进制文件的读取。,格式: 输入流对象名. read(buf, n) 功能:从输入流中读取n个字节(含换行符在内)或遇到输入流结束符(ctrl+z)时结束操作读入的数据存入字符指针buf所指存储区,且
15、不在字符串尾添加空字符(0) 返回值:当前输入流对象,例5 读写二进制文件示例。,执行,data3.dat,六、以随机方式读/写文件, 对文件的读写受到一个定位指针的控制。 读指针:从读指针当前所指位置读出数据,向后移动读指针使其指向下一个数据。 写指针:把数据写到写指针当前所指位置,向后移动写指针,使其指向下一个写数据的位置。, 利用C+流类中提供的成员函数,可改变读/写指针,从而实现对文件的随机读/写。, 随机访问多用于二进制文件。,六、以随机方式读/写文件, 操作写指针的成员函数 1)移动写指针。 调用格式1: 输出流对象名.seekp(流中位置); 调用格式2: 输出流对象名.seek
16、p(偏移量,参照位置); 取ios类中的枚举量:beg(0)相对文件头; curr(1)相对文件当前位置;end(2)相对文件尾。 2)返回写指针当前位置(相对于文件头的字节数)。 调用格式: 输出流对象名.tellp(),六、以随机方式读/写文件, 操作读指针的成员函数 1)移动读指针。 调用格式1: 输入流对象名.seekg(流中位置); 调用格式2: 输入流对象名.seekg(偏移量,参照位置); 取ios类中的枚举量:beg(0)相对文件头; curr(1)相对文件当前位置;end(2)相对文件尾。 2)返回读指针当前位置(相对于文件头的字节数)。 调用格式: 输入流对象名.tellg(),例 文件的随机访问示例。把100个素数存入文件data.bin。从文件data.bin中取出第n个素数并输出。,8.4 格式化输入输出, 格式化输入输出是指控制文本模式I/O流的格式。例如,设置字段宽度、对齐方式、输出数字的精度等。C+提供两种进行格式化输入输出的方法: 用ios类的成员函数设置格式 使用格式操纵算子 格式成员函数和格式操纵算子详细情况见书。,例:格式化输出成员函数使用示例。,0123456789012345
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肯德基管理组工作总结
- 医院食堂厨师承包合同范本
- 软件著作权买卖及授权使用合同
- 显微根管治疗操作指南
- 成都住宅租赁合同范本
- 股权收益权交易合同
- 房地产转让合同正式文件
- 标准购房合同范本:自然人专用
- 胸腔引流管的观察及护理
- 芬兰的早期幼儿教育
- 煤炭开采特种机器人的设计与制造
- 小米公司财务绩效分析
- 室内装修施工组织设计
- 需求跟踪矩阵-模板
- G -B- 39800.6-2023 个体防护装备配备规范 第6部分:电力(正式版)
- 《水泵及水泵站》配套习题资料
- 干部人事档案转递单(带存根回执)
- 十八项医疗核心制度汇编
- 2022教学能力大赛《智能网联汽车传感器测试与装调》实施报告
- (高清版)TDT 1059-2020 全民所有土地资源资产核算技术规程
- 山东省济南市2022-2023学年八年级下学期物理期中试卷(含答案)
评论
0/150
提交评论