




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章输入输出流与文件 缪裕青 2 本章主要内容 输入 输出流 I O流 预定义类型的输入 输出对象的输入 输出文件的读 写文本文件二进制文件随机文件 3 输入输出流 1 在程序设计中 数据输入 输出 I O 操作是必不可少的输入 Input 输出 Output 在C 程序中可以继续使用C的标准I O库函数printf和scanf实现输入输出功能 也可以使用C 语言给用户提供的可扩展的输入输出流类 通过使用I O流库 不仅能够处理基本类型数据 还能处理用户自定义的数据类型 计算机内存 外部输出设备 计算机内存 外部输入设备 4 输入输出流 2 I O流的概念I O是一种基本的数据传送操作 它可以理解为字符序列在计算机内存与外设之间的流动 将数据从一个对象到另一个对象的流动称为流 流具有方向性 输入流 与输入设备相联系的流称为输入流 输出流 与输出设备相联系的流称为输出流 输入输出流 与输入 输出设备相联系的流称为输入输出流 外部设备 计算机内存 5 流类库 1 I O流类库在C 中 输入输出流被定义为类 称为流类 按照面向对象方法组织的多个流类及其层次集合称为流类库 6 流类库 2 常用的流类库 以及在编程中需要包含到程序中的头文件 7 流类库 3 预定义的流对象cin是istream流类的一个对象 用于处理标准输入设备的输入cout cerr clog都是ostream流类的对象cout用于处理标准输出设备的输出cerr和clog均可用于处理标准出错信息 不同之处在于cerr输出不带缓冲功能 clog输出具有缓冲功能在缺省情况下 指定的标准输出设备是显示屏 标准输入设备是键盘 在任何情况下 指定的标准错误输出设备总是显示屏 8 预定义类型的输入输出 预定义类型的输入输出指预定义类型数据对于标准输入输出设备的输入输出 预定义类型的输入输出分为无格式输入输出格式化输入输出两个相关运算 运算符重载 提取运算 从流中获取数据的操作称为提取运算 输入流插入运算 向流中添加数据的操作称为插入运算 输出流 9 无格式输入输出 无格式 默认格式 输入输出使用两个流对象cin和cout 和与之相配套的两个运算符 和 和 变量 输入cout 变量 cout operator 表达式 仅依靠默认的格式不能满足实际需要 如设定输出项的宽度 浮点数的精度以及对齐方式等等 10 格式化输入输出 C 提供了两种格式的控制方法 使用ios类中有关格式控制的成员函数进行格式控制使用流操作算子 特殊函数 进行格式控制 11 成员函数格式控制 1 使用ios类中有关格式控制的成员函数进行格式控制控制输入输出格式的成员函数 状态标志flags及其含义如书上表14 1所示设置多项状态标志中间用 运算符分隔 状态标志1 状态标志2 12 成员函数格式控制举例 includeintmain cout 12 345678 endl cout cout precision 4 endl cout 12 34 12 3456 endl cout cout width endl cout width 10 cout 12 3456 endl cout fill cout 12 3456 endl cout width 10 cout 12 3456 endl cout Hi endl cout width 10 cout Hi endl cout width 10 cout setf ios left cout 12 3456 endl return0 13 流操作算子格式控制 C 流操作算子包括无参函数 定义在头文件iostream h有参函数 定义在头文件iomanip h流操作算子可以用在提取运算符 或插入运算符 后面来设定输入输出格式 是I O表达式的一部分 流操作算子如书上表14 2所示 14 流操作算子格式控制举例 include includeintmain cout 123456789 endl cout setw 10 123456789 endl cout setiosflags ios scientific setw 20 123 456789 endl cout resetiosflags ios scientific setprecision 4 123 456789 endl cout setiosflags ios left setfill setw 8 123 endl cout resetiosflags ios left setfill setw 8 123 endl return0 15 例 定义一个最简单的日期类 仅包含数据成员 includeusingnamespacestd classDate public intyear month day 公有成员 intmain Datedate1 date2 声明2个日期对象cin date1 date2 cout date1 date2 endl return0 对象的输入与输出 1 如何输入 输出对象 16 例 定义简单的完整意义上的日期类 includeusingnamespacestd classDate intyear month day 私有数据成员public voidinput 公有成员函数voidprint ymd voidDate input 输入数据 cin year month day 对象的输入与输出 2 17 例 定义简单的完整意义上的日期类 voidDate print ymd 输出年月日格式 cout year month day endl intmain Datedate1 date2 date1 input 通过函数调用完成对象的输入date1 print ymd 通过函数调用完成对象的输出date2 input date2 print ymd return0 对象的输入与输出 3 通过对象的成员函数调用实现对象的输入输出 能通过输入输出运算符输入输出对象吗 18 includeclassSample intx y public Sample intm 0 intn 0 x m y n friendostream 相当于 operator operator cout b c 对象的输入与输出 4 19 文件的读写 1 数据在磁盘中是以文件的方式存放的 用文件名作为标识 流式文件 无论文件的内容是什么 一律把文件看成由字符 字节 构成的序列 即字符流 文件的读 从文件读到内存 使用输入流运算符 文件的写 从内存写到文件 使用输出流运算符 20 文件的读写 2 文件中数据的存放形式 文本文件 ASCII文件 它的每一个字节存放一个ASCII码 代表一个字符 二进制文件 将数据用二进制形式存放在文件中 并保持了数据在内存中存放的原有格式 文件读写的操作方式顺序文件操作从文件的第一个字符 字节 开始顺序地处理到文件的最后一个字符 字节 随机文件操作在文件中通过C 相关的函数移动文件指针 使其指向所要处理的字符 字节 21 文件的读写 3 在C 中进行文件操作 读写 的一般步骤 在程序中包含头文件fstream h创建一个I O文件流 对象 将创建的流 对象 与文件相关联 即打开文件 如果文件不存在 则建立文件 如果文件已存在 则打开文件 进行文件读 写操作关闭文件 22 文件的读写 4 C 有3种类型的文件流 类 输入文件流ifstream输出文件流ofstream输入输出文件流fstream这些文件流都定义在fstream h文件中或名字空间std的文件fstream中 23 文件的读写 5 打开文件使用open 函数可以打开文件 也就是使某一文件与上面的某一流对象相关联 open 函数是3个流类的成员函数 其原型定义在fstream h中 open函数原型 voidopen constchar filename intmode 关闭文件使用close 函数关闭文件 也就是断开流与文件的链接 24 文件的读写 7 例如 ofstreamout out open test txt out close ifstreamin in open test txt in close ifstream ofstream fstream都有能够自动打开文件的构造函数最常见的文件打开方式 ofstreamout test txt out close ifstreamin test txt in close 创建一个输出流对象 打开文件test txt 使其与上面输出流关联 关闭文件test txt 断开其与输出流的联系 创建一个输出流 并使文件与其关联 25 文件的读写 6 文件 位置 指针存放文件读写位置的变量 文件开始位置指针值为0 每次读写之后 自动将文件指针的值加上本次读写的字节数 作为下次读写的位置 只有在打开文件后 才能对文件进行读写操作在使用文件之前 必须进行检测 以确认打开一个文件是否成功例如 if out cout Cannotopenfile n 错误处理代码 26 顺序文件 文本文件的写 1 例 创建一个名为 grade1 的文本文件 并写入3门课程的名字和成绩 无格式写 include includeusingnamespacestd intmain ofstreamout 定义输出流对象out open grade1 txt 通过打开函数将输出流对象与文件相连if out cout Cannotopenthefile endl return1 out C 89 5 endl 依次写数据到文件中out English 93 5 endl out Maths 87 endl out close 关闭文件return0 27 顺序文件 文本文件的写 2 例 创建一个名为 grade1 的文本文件 并写入3门课程的名字和成绩 带格式写 include include includeusingnamespacestd intmain ofstreamout grade1 txt 定义输出流对象与文件相连if out cout Cannotopenthefile endl return1 out setiosflags ios left out setw 10 C 89 5 endl 依次写数据到文件中out setw 10 English 93 5 endl out setw 10 Maths 87 endl out close 关闭文件return0 28 顺序文件 文本文件的读 1 例 读取上例创建的 grade1 txt 文件 并将文件内容显示在屏幕上 include includeusingnamespacestd intmain ifstreamin grade1 txt 定义输入流对象与文件相连if in cout course grade 依次读出数据cout course grade cout course grade cout course grade n in close 关闭文件return0 29 输入输出流的成员函数 1 输入输出流除了open close 这些成员函数外 还有其他成员函数get put ignore putback peek read write 30 输入输出流的成员函数 2 includeusingnamespacestd voidmain constintSIZE 80 charch1 ch2 buffer1 SIZE buffer2 SIZE cout buffer1 cout Thestringreadwithcinis n buffer1 cin ignore 从输入流中忽略一个字符cin read buffer1 3 从输入流中读入三个字符到buffer1中cout nTheresultofcin read is n cout write buffer1 3 将buffer1中的三个字符写到输出流中 屏幕上 cin ignore 忽略一个字符cout nTheresultofcin get is n ch1 cin get 从输入流中读入一个字符cout put ch1 写出一个字符到输出流中cin putback ch1 放回一个字符到输入流中cout nputbackandpeek cin peek char cin peek 从输入流得到一个字符cin get ch2 从输入流中读入一个字符到ch2中cout nTheresultofcin get ch2 is n ch2 cin get buffer2 SIZE 从输入流中读入SIZE个字符到buffer2中cout nThestringreadwithcin get buffer2 SIZE is n buffer2 endl 31 综合练习 例 创建一个名为 grade1 的文本文件 完成 写入3门课程的名字和成绩 将文件中成绩大于90分的课程名和成绩输出在显示屏上 输入课程名在文件中查找 如果找到将查找到的课程名与成绩显示出来 如果没有找到给出相应的信息 32 综合练习 续 include includeusingnamespacestd intmain o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 培训房屋销售代表
- 装修管理流程图
- 固定资产会计年终总结
- 江苏省镇江市部分学校2026届九上化学期中经典模拟试题含解析
- 湖北省襄阳市枣阳实验中学2026届化学九上期中质量检测试题含解析
- 2026届山东省滕州市业水平考试数(基础卷)九年级化学第一学期期中达标测试试题含解析
- 商场内员工培训
- 河南省商丘市虞城县2026届九年级英语第一学期期末综合测试模拟试题含解析
- 幼儿园教师年底工作总结
- 年会展部工作总结
- GB/T 31586.1-2015防护涂料体系对钢结构的防腐蚀保护涂层附着力/内聚力(破坏强度)的评定和验收准则第1部分:拉开法试验
- 安徽省电气试验收费标准
- 医院消毒供应中心管理规范清洗消毒及灭菌效果监测标准课件
- 小古文《放风筝》课件
- 污水化验培训课件
- 《企业年度培训计划制定》
- 医疗机构卫生技术人员名录
- 安全文明施工措施费使用计划表完整优秀版
- 材料、构配件进场检验记录
- 大象版五年级科学上册 《感官、大脑与认知》教育教学课件
- 电生理发展史
评论
0/150
提交评论