




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章流类库与输入/输出,清华大学计算机与信息管理中心郑莉,C+语言程序设计,2,本章主要内容,I/O流的概念输出流输入流输入/输出流,3,I/O流的概念,当程序与外界环境进行信息交换时,存在着两个对象,一个是当前程序,另一个是文件或设备。流是一种抽象,它负责在数据的源和数据的目的之间建立联系,并管理数据的流动。程序建立一个流对象,并指定这个流对象与某个文件或设备对象建立关联,程序操作流对象,流对象在操作系统的支持下对所关联的文件或设备进行操作:读操作在流操作中被称为(从流中)提取写操作在流操作中被称为(向流中)插入,4,输出流,最重要的3个输出流是ostreamofstreamostrstream,5,输出流对象,通过派生类ostream_withassign支持标准输出设备的输出和以下由系统预先定义的流对象:cout标准输出流对象,与标准输出设备相关联cerr标准错误输出流对象,与标准输出设备相关联无缓冲,发送给它的内容立即被输出。clog类似于cerr,与标准输出设备相关联但是有缓冲,缓冲区满时方被输出。,输出流,6,输出流对象,ofstream类支持磁盘文件的输出用户构造一个ofstream类的对象。在打开文件之前或之后指定该对象的工作方式,包括:写数据的形式(二进制、文本)写指针处理(添加、随机写),输出流,7,输出流对象,如果在构造函数中指定一个文件名,当构造这个文件时该文件将被自动打开ofstreammyFile(filename,iosmode);,输出流,文件名及路径,文件操作方式,8,输出流对象,也可以在调用缺省构造函数之后使用成员函数open()打开文件,例如:ofstreammyFile;/声明一个静态输出文件流对象myFile.open(“filename”,iosmode);/打开文件,使流对象与文件建立关联ofstream*pmyFile=newofstream;/在堆中建立一个输出文件流对象pmyFile-open(“filename”,iosmode);/打开文件,使流对象与文件建立关联,输出流,9,输出流对象,也可以在一个由文件指示符标识的打开文件基础上构造一个ofstream对象。例如:intfd=open(“filename”,dosmode);/文件句柄ofstreammyFile1(fd);/缺省为缓冲方式ofstreammyFile2(fd,NULL,0);/非缓冲方式,输出流,10,插入运算符(),针对C+所有的基本数据类型,重载运算符为流插入运算符。用于传送字符数据到一个输出流对象。,输出流,11,控制输出格式,控制输出宽度调整单项数据的输出宽度(域宽),可以采用以下办法:在流中插入操纵符setw以指定输出宽度调用成员函数width()以指定输出宽度,输出流,12,例11-1使用width控制输出宽度,#includevoidmain()doublevalues=1.2,35.36,653.7,43.24;for(inti=0;i4;i+)cout.width(10);coutvaluesin;,输出流,输出结果是:1.235.36653.743.24,#includevoidmain()doublevalues=1.2,35.36,653.7,43.24;for(inti=0;i4;i+)cout.width(10);cout.fill(*);/域中空位用*填充coutvaluesin;,输出结果如下:*1.2*35.36*653.7*43.24,16,例11-2使用setw指定宽度,#include#includevoidmain()doublevalues=1.2,35.36,653.7,43.24;charnames=Zoot,Jimmy,Al,Stan;for(inti=0;i4;i+)coutsetw(6)namesisetw(10)valuesiendl;,输出流,运行结果如下:Zoot1.2Jimmy35.36Al653.7Stan43.24,18,例11-3设置对齐方式,#include#includevoidmain()doublealues=1.2,35.36,653.7,43.24;char*names=Zoot,Jimmy,Al,Stan;,输出流,for(inti=0;i4;i+)coutsetiosflags(ios:left)setw(6)namesiresetiosflags(ios:left)setw(10)valuesiendl;,输出结果如下:Zoot1.2Jimmy35.36Al653.7Stan43.24,20,例11-4控制输出的精度,#include#includevoidmain()doublevalues=1.2,35.36,653.7,43.24;char*names=Zoot,Jimmy,Al,Stan;coutsetiosflags(ios:scientific);,输出流,for(inti=0;i4;i+)coutsetiosflags(ios:left)setw(6)namesiresetiosflags(ios:left)setw(10)setprecision(1)valuesiendl;,该程序的输出结果如下:Zoot1Jimmy4e+001Al7e+002Stan4e+003,22,输出数据的进制表示,用dec、oct和hex操纵符设置输入和输出的缺省进制:dec十进制oct八进制hex十六进制,输出流,23,输出文件流成员函数,输出流成员函数有3种类型:与操纵符等价的成员函数。非格式化写操作的成员函数。其它修改流状态且不同于操纵符或插入运算符的成员函数。,输出流,24,输出文件流成员函数,open()函数按一定操作模式打开文件,将该文件与流相关联,put()函数将一个字符写到输出流中。write()函数把内存中的一块数据写到输出文件流中seekp()和tellp()函数操作(定位,查询)预留相关联的文件指针close()函数将流所关联的磁盘文件关闭错误处理函数在写流文件时进行错误处理,输出流,25,例11-5向文件输出,#includestructDateintmo,da,yr;voidmain()Datedt=6,10,92;ofstreamtfile(date.dat,ios:binary);tfile.write(char*),输出流,数据块首址,数据块大小,二进制形式,26,二进制输出文件,使用ofstream构造函数中的模式参数ios:binary来指定二进制输出模式以通常方式构造一个流,然后使用成员函数setmode(ios:binary),在文件打开后改变模式。使用二进制操作符ofs来指定二进制输出模式,如ofs),针对C+所有的基本数据类型,系统重载运算符为流提取运算符。从一个输入流对象获取字节最容易的方法。ios类中的很多操纵符都可以应用于输入流。但是常用的只有少数几个,其中最重要的是进制操纵符dec、oct和hex。,输入流,30,输入流成员函数,open()函数把该流与一个特定磁盘文件相关联。get()函数的功能与提取运算符很相像,主要的不同点是读入数据时可含有空白字符。(第6章介绍过)getline()的功能是从输入流中读取多个字符,并且允许指定输入的终止字符,读取完成后,从读取的内容中删除终止字符。(第6章介绍过),输入流,31,输入流成员函数,read()成员函数从一个文件读字节到一个指定的内存区域,要读出的字节数一般由长度参数来确定。若读取长度未到,而遇到文件结束(二进制文件)或者遇到文件结束标记字符(文本文件)时将提前结束读取操作。,输入流,32,例11-6文件读二进制记录,#include#include#includevoidmain()structdoublesalary;charname23;employee;,输入流,ifstreamis(payroll,ios:binary|ios:nocreate);if(is)is.read(char*),read()函数与write()函数的用法相同,34,输入流成员函数,seekg()函数用来设置输入文件流中读取数据位置的指针。tellg()函数返回当前文件读指针的位置。close()函数关闭与流对象关联的磁盘文件。,输入流,35,例11-7设置位置指针,#includevoidmain()charch;ifstreamtfile(payroll,ios:binary|ios:nocreate);if(tfile)tfile.seekg(8);,输入流,while(tfile.good()tfile.get(ch);if(!ch)break;coutch;elsecoutERROR:Cannotopenfilepayroll.endl;,37,例11-8读文件并显示其中空格的位置,#includevoidmain()charch;streamposhere;ifstreamtfile(“chen.txt,ios:binary|ios:nocreate);,输入流,if(tfile)while(tfile.good()here=tfile.tellg();tfile.get(ch);if(ch
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 举办心理健康讲座传授技巧
- 基因编辑伦理审查标准操作流程
- (2025年标准)广告横幅协议书
- (2025年标准)雇佣协议责任最小协议书
- 智慧城市背景下物流行业高效配送解决方案一
- 软件行业云计算与大数据开发方案
- 婚纱摄影行业在线预约与选片系统设计方案
- 小学数学培优辅差课程计划
- 2026届湖北省随州市随县化学高二第一学期期中调研试题含解析
- 小学三年级下册数学实践活动计划
- 2023砌体结构后锚固技术规程
- 子宫内膜癌医师教学查房市公开课一等奖课件省赛课获奖课件
- 膝痹中医护理方案效果总结分析报告
- 铸造基础知识及常见铸造缺陷简介演示
- 中式烹调师(高级技师考试资料)
- 仓储技术与库存理论简论
- 日地空间灾害性天气的发生发展和预报研究课件
- 西安大唐不夜城的项目整体推广的策略提案的报告课件
- 可下载打印的公司章程
- 少先队辅导员工作记录表(共7页)
- 公开课教学评价表
评论
0/150
提交评论