




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 程序设计 第4篇面向对象的程序设计第13章输入输出流铜陵学院汪永生 1 目录 13 1C 的输入和输出13 2标准输出流13 3标准输入流13 4对数据文件的操作与文件流13 5对二进制文件的操作 2 第13章输入输出流 13 1C 的输入和输出13 1 1输入输出的含义从操作系统的角度 每一个与主机相连的输入输出设备都看作一个文件 程序的输入是指从输入文件将数据传送给程序 程序的输出是指从程序将数据传送给输出文件 C 的输入与输出包括以下3个方面的内容 1 对系统指定的标准设备的输入和输出 2 以外存为对象进行输入和输出 3 对内存中指定的空间进行输入和输出 为了实现数据的有效流动 C 系统提供了庞大的I O类库 调用不同的类去实现不同的功能 3 第13章输入输出流 13 1 2C 的I O对C的发展 类型安全和可扩展性C 为了与C兼容 保留了用print和scanf进行输出和输入 在C 的输入和输出中 编译系统对数据类型进行严格的检查 凡是类型不正确的数据是不可能通过编译的 因此 C 的I O操作是类型安全的 C 提供了一套面向对象的输入输出的系统 C 的类机制使得它能建立了一套可扩展的I O系统 可以通过修改和扩充 能用于用户自己声明的类型的对象的输入输出 可扩展性是C 输入输出的重要特点之一 它能提高软件的重用性 加快软件的开发过程 C 通过I O类库来实现丰富的I O功能 4 第13章输入输出流 13 1 3C 的输入输出流输入和输出是数据传送的过程 数据如流水一样从一处流向另一处 C 形象地将此过程称为 流 C 的输入输出流是指由若干字节组成的字节序列 这些字节中的数据按顺序从一个对象传送到另一个对象 流表示了信息从源到目的端的流动 流是与内存缓冲区相对应的 或者说 缓冲区中的数据就是流 在C 中 输入输出被定义为类 C 的I O库中的类称为流类 用流类定义的对象称为流对象 1 C 的流库流类库是用继承方法建立起来的用于输入输出的类库 这些类有两个基类 ios类和streambuf类 所有其他流类都是从它们直接或间接派生出来的 ios类是输入输出操作在用户端的接口 为用户的输入输出提供服务 streambuf是处理 流缓冲眍 的类 包括缓冲区起始地址 读写指针和对缓冲区的读写操作 是数据在缓冲区中的管理和数据输入输出缓冲区的实现 是输入输出操作在物理设备一方的接口 总结 ios负责高层操作 streambuf负责低层操作 为ios提供低级 物理级 的支持 5 第13章输入输出流 1 C 的流库 表13 1I O类库中的常用流类 6 第13章输入输出流 1 C 的流库 Ios是抽象基类 由它派生出istream类和ostream类 iostream类是从istream类和ostream类通过多重继承而派生的类 其继承层次见图13 1 类ifstream继承了类istream 类ofstream继承了类ostream 类fstream继承了类iostream 见图13 2 7 第13章输入输出流 1 C 的流库 I O类库中还有其他类 见图13 3 8 第13章输入输出流 2 与流类库有关的头文件头文件是程序与类库的接口 I O流类库的接口分别由不同的头文件来实现 常用的用 iostream包含了对输入输出流进行操作所需的基本信息 fstream包含了用户管理的文件的I O操作 strstream用于字符串流I O stdiostream用于混合使用C和C 的I O机制时 例如想把C程序转变为C 程序 iomanip在使用格式化I O时应包含此文件 3 在iostream头文件中定义的流对象iostream头文件包含了对输入输出流进行操作所需的基本信息 在iostream头文件中不仅定义了有关的类 还定义了4种流对象 见表13 2 表13 2iostream头文件中定义的4种流对象 9 第13章输入输出流 4 在iostream头文件中重载运算符重载 运算符 以便能用它输入或输出各种标准数据类型的数据 如 如何理解运算符 的作用 简单而形象的方法 它们指出了数据移动的方向 例如 cin a 箭头方向表示把输入流cin中的数据放入a中 cout a 箭头方向表示从a中拿出数据放到输出流中 10 第13章输入输出流 13 2标准输出流标准输出流是流向标准输出设备 显示器 的数据 13 2 1cout cerr和clog流ostream类定义了3个输出流对象 即cout cerr clog 1 cout流对象cout是consoleoutput的缩写 意思为在控制台 终端显示器 的输出 说明 1 cout不是C 预定义的关键字 它是ostream流派生类的对象 在iostream头文件中定义 2 用 cout 和 运算符用于标准类型数据的输入输出进行了重载 但未对用户声明的类型数据的输入输出进行重载 11 第13章输入输出流 运行结果 12 第13章输入输出流 3 clog流对象clog consolelog的缩写 流对象也是标准错误流 它的作用和cerr相同 都是在终端显示器上显示出错信息 区别 cerr是不经过缓冲区直接向显示器上输出有关信息 而clog中的信息存放在缓冲区中 缓冲区满后或遇endl时向显示器输出 13 第13章输入输出流 13 2 2标准类型数据的格式输出C 提供预定义类型的输入输出系统 用来处理标准类型数据的输入输出 两种输入输出方式 1 无格式输入输出 2 有格式输入输出 1 使用控制符控制输出格式控制符在头文件iomanip中定义 因而程序中应当包含iomanip头文件 2 用流对象的成员函数控制输出格式用于控制输出格式的流成员函数见表13 3 14 第13章输入输出流 2 用流对象的成员函数控制输出格式格式标志见表13 4 15 第13章输入输出流 2 用流对象的成员函数控制输出格式例13 2用流对象的成员函数控制输出数据格式 编写程序 运行结果 16 第13章输入输出流 13 2 3用流成员函数put输出字符ostream类成员函数put 专用于输出单个字符 参数可以是字符或字符的ASCII代码 或整型表达式 例13 3有一个字符串 BASIC 要求把它们按相反的顺序输出 编写程序 运行结果 17 第13章输入输出流 13 3标准输入流标准输入流是从标准输入设备 键盘 流向程序的数据 13 3 1cin流cin是istream类的派生类的对象 它从标准输入设备 键盘 获取数据 程序中的变量通过流提取符 从流中提取数据 流提取符 从流中提取数据时通常跳过输入流中的空格 Tab键 换行符等空白字符 注 只有在键盘输入完数据并按Enter键后 该行数据才被送入键盘缓冲区 形成输入流 提取运算符 才能从中提取数据 在遇到无效字符或文件结束符 不是换行符 是文件中的数据已读完 时 输入流cin就处于出错状态 即无法正常提取数据 可以Ctrl Z或Ctrl D表示文件结束符 cin出错状态 值为0 cin正常状态 值为非0 18 第13章输入输出流 13 3 2用于字符输入的流成员函数1 用get函数读入一个字符流成员函数get有3种形式 无参数 一个参数 3个参数 1 无参数的get函数其调用形式 cin get 说明 用来从指定的输入流中提取一个字符 包括空白字符 函数的返回值就是读入的字符 若遇到输入流中的文件结束符 则函数返回值EOF 代表 1 例13 4用get函数读入字符 编写程序 运行结果 19 第13章输入输出流 2 有一个参数的get函数其调用形式 cin get ch 说明 从输入流中读取一个字符 赋给字符变量ch 如果读取成功则函数返回非0值 如失败 遇文件结束符 则函数返回0值 3 有3个参数的get函数其调用形式 cin get 字符数组 字符个数n 终止字符 或cin get 字符指针 字符个数n 终止字符 作用 是从输入流中读取中n 1个字符 赋给指定的数组 或字符指针指向的数组 如果在读取n 1个字符之前遇到指定的终止字符 则提前结束读取 如果读取成功 则函数返回非0值 如失败 则函数返回0值 2 用成员函数getline函数读入一行字符其调用形式 cin getline 字符数组 或字符指针 字符个数n 终止标志符 作用 从输入流中读取一行字符 20 第13章输入输出流 13 3 3istream类的其他成员函数1 eof函数eof是endoffile的缩写 表示 文件结束 从输入流读取数据 如果到达文件末尾 遇到文件结束符 eof函数值为非零值 表示真 否则为0 假 例13 5逐个读入一行字符 将其中的非空格字符输出 编写程序 运行结果 2 peek函数peek函数的作用 观测下一个字符 其调用形式为 c cin peek 21 第13章输入输出流 3 putback函数其调用形式为 c cin putback 其作用 将前面用get或getline函数从输入流中读取的字符ch返回到输入流 插入到当前指针位置 以供后面读取 例13 6peek函数和putback函数的用法 编写程序 运行结果 程序分析 22 第13章输入输出流 4 ignore函数其调用形式为 cin ignore n 终止字符 其作用 跳过输入流中n个字符 或在遇到指定的终止字符时提前结束 此时跳过包括终止字符在内的若干字符 例13 7用ignore函数跳过输入流中的字符 编写程序 不用ignore函数 程序改写 增加ignore函数 运行结果 运行结果 23 第13章输入输出流 13 4对数据文件的操作与文件流13 4 1文件的概念文件 一般指存储在外部介质上数据的集合 是程序设计中一个重要的概念 操作系统是以文件为单位对数据进行管理的 对用户来说 常用的文件有两大类 一类是程序文件 如C 的源程序文件 cpp 目标文件 obj 可执行文件 exe 等 另一类是数据文件 在程序运行时 常常需要将一些数据输出到磁盘上存放起来 以后需要时再从磁盘中输入到计算机内存 根据文件中数据的组织形式可分 ASCII文件和二进制文件 见图13 5 24 第13章输入输出流 13 4 2文件流与文件文件流 是以外存文件为输入输出对象的数据流 输出文件流是从内存流向外存文件的数据 输入文件流是从外存文件流向内存的数据 文件流本身不是文件 而只是以文件为输入输出对象的流 用文件操作的文件类 ifstream类 ofstream fstream类 以磁盘文件为对象进行输入输出 必须定义一个文件流类的对象 通过文件流对象将数据从内存输出到磁盘文件 或者通过文件流对象从磁盘文件将数据输入到内存 例如 建立一个输出文件流对象ofstreamoutfile 25 第13章输入输出流 13 4 3文件的打开与关闭1 打开磁盘文件 1 调用文件流的成员函数open 如ofstreamoutfile 定义ofstream类对象outfileoutfile open f1 dat ios out 使文件流与f1 dat文件建立关联调用成员函数open的一般形式为 文件流对象 open 磁盘文件名 输入输出方式 2 在定义文件对象时指定参数 如ostreamoutfile f1 dat iso out 输入输出方式是在IOS类中定义的 它们是枚举常量 有多种选择 见表13 5 26 第13章输入输出流 1 打开磁盘文件 说明 1 新版本的I O类库中不提供ios nocreate和ios noreplace 2 每一个打开的文件都有一个文件指针 每次读写都从文件指针的当前位置开始 3 可以用 位或 运算符 对输入输出方式进行组合 4 如果打开操作失败 open函数返回值为0 如果是用调用构造函数的方式打开文件 则流对象的值为0 如 if outfile open f1 dat ios app 0 cout openerror 或if outfile open f1 dat ios app cout openerror 2 关闭磁盘文件关闭文件用成员函数close 如outfile close 将输出文件流所关联的磁盘文件关闭 27 第13章输入输出流 13 4 4对ASCII文件的操作ASCII文件 或称字符文件 文件的每一个字节中均以ASCII代码的形式存放数据 即一个字节存放一个字符 对ASCII文件的读写操作可以用两种方法 1 用流插入运算符 输入输出标准类型的数据 2 用文件流put get getline等成员函数进行字符的输入输出 例13 8有一个整型数组 含10个元素 从键盘输入10个整数数组 将此数组送到磁盘文件存放 运行结果 28 第13章输入输出流 13 4 4对ASCII文件的操作例13 9从例13 8建立的数据文件f1 dat中读入10个整数放在数组中 找出并输出10个数中的最大者和它在数组中的序号 编写程序 运行结果 29 第13章输入输出流 13 4 4对ASCII文件的操作例13 10从键盘读入一行字符 把其中的字母字符依次存放在磁盘文件f2 dat中 再把它从磁盘文件读入程序 将其中的小写字母改为大写字母 再存入磁盘文件f3 dat 编写程序 运行结果 30 第13章输入输出流 13 4 5对二进制文件的操作二进制文件 将内存中的数据存储形式不加转换地传送到磁盘文件 又称内存数据的映像文件 或称字节文件 1 用成员函数read和write读写二进制文件istream注 字符指针buffer指向内存中一段存储空间 len是读写的字节数 例13 11将一批数据以二进制形式存放在磁盘文件中 编写程序 31 第13章输入输出流 2 与文件指针有关的流成员函数文件读写位置标记是指明当前应进行读写的位置 3 随机访问二进制数据文件例13 13有5个学生的数据 要求 1 把它们存到磁盘文件中 2 将磁盘文件中的第1 3 5个学生数据读入程序 并显示出来 3 将第3个学生的数据修改后存回磁盘文件中的原有位置 4 从磁盘文件读入修改后的5个学生的数据并显示出来 编写程序 32 第13章输入输出流 运行结果 33
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能交通项目招标文件范本
- 线性代数习题解析及答题技巧
- 曲阜师范大学附属梁山中学 2016年部编历史七年级上册 第11课《西汉建立和“文景之治”》说课稿
- 第四单元 第三课 拍摄学校创意短视频教学设计 西交大版(2024)初中信息技术七年级上册
- 企业收费通知模板及使用说明
- 本章复习与测试说课稿-2025-2026学年高中物理上海科教版选修2-1-沪教版2007
- 悦纳自己活出真实的自我(说课稿)2023-2024学年初三下学期教育主题班会
- 公务员录用考试题库及解析(2023版)
- 汽车销售与售后服务流程标准化手册
- PLC控制系统应用于锅炉自动化案例
- 中国红歌名曲课件
- 2025年及未来5年中国电子天平市场前景预测及行业投资潜力预测报告
- 2025特种设备培训试题及答案
- 脑病科课件教学课件
- 2025福建晋江市新丝路商贸有限责任公司招聘4人笔试历年参考题库附带答案详解
- 第三章代数式七年级上学期数学重点题型(原卷版)(2024苏科新版)
- 美甲老师教学员课件
- 2025江苏南京栖霞区发改委编外工作人员招聘1人备考考试题库附答案解析
- DB11∕T 1810-2020 装配式抗震支吊架施工质量验收规范
- 2025-2026学年统编版(2024)七年级道德与法治第一学期第一单元 少年有梦 单元练习卷 (含答案)
- 做有梦想的少年+课件-2025-2026学年统编版道德与法治七年级上册
评论
0/150
提交评论