C++程序设计课件第4章.ppt_第1页
C++程序设计课件第4章.ppt_第2页
C++程序设计课件第4章.ppt_第3页
C++程序设计课件第4章.ppt_第4页
C++程序设计课件第4章.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020 3 27 1 第4章输入 输出流 本章学习重点掌握内容 输入 输出流类体系结构输入 输出流的格式化输入 输出流对象文本文件和二进制文件的输入和输出综合应用实例 2020 3 27 2 第4章输入 输出流 4 1输入 输出流基本概念4 2输入 输出流类体系4 3I O流操作4 4文件流和文件的输入 输出4 5字符串流4 6重载插入和提取运算符 2020 3 27 3 4 1输入 输出流基本概念 1 流流是一种抽象 它负责在数据的生产者 程序 文件 和数据的消费者 文件 程序 之间建立联系 并管理数据的流动 2 字节流字节流分为字符流 也称文本流 和二进制流 字符流在数据传输时需作转换 效率较低 但可以直接编辑 显示或打印 2020 3 27 4 4 1输入 输出流基本概念 二进制流将字节流的每个字节以二进制方式解释 它在数据传输时不作任何转换 故效率高 但无法人工阅读 可移植性较差 3 文件文件是一般指存储在外部介质上数据的集合 计算机中的程序 数据 文档通常都组织成文件存放在外存储器中 2020 3 27 5 4 1输入 输出流基本概念 4 缓冲系统在主存中开辟的 用来临时存放输入输出数据的区域 成为输入输出缓冲区 简称缓冲区 5 命名空间命名空间 就是在程序的不同的模块中使用相同的名字表示不同的事物 实体 目的是提供一种机制 使大程序的各个部分中因出现重名而导致冲突的可能性降到最低 2020 3 27 6 4 2输入 输出流类体系 C 为实现数据的输入和输出定义了一个庞大的流类库 它包括的类主要有ios istream ostream iostream ifstream ofstream fstream等 类istream和ostream是类ios的公有派生类 分别提供输入和输出操作 继承关系见下图 2020 3 27 7 4 2 1流类库 2020 3 27 8 4 2 1流类库 C I O常用流类列表 1 2020 3 27 9 4 2 1流类库 C I O常用流类列表 2 2020 3 27 10 4 2 2标准流对象 C 语言在头文件iostream h中预定义了4个标准流类的对象 externistreamcin 标准输入流对象externostreamcout 标准输出流对象externostreamcerr 标准错误流 非缓冲 对象externostreamclog 标准错误流对象 2020 3 27 11 4 2 2标准流对象 cin是consoleinput缩写 在默认的情况下 代表键盘 cout是consoleoutput的缩写 在默认的情况下 代表显示器 cerr和clog是consoleerror和consolelog的缩写 在默认的情况下 代表显示器 这四个标准流中 cerr为非缓冲流 其余均为缓冲流 输入就是从流中提取一个字节序列 C 用 运算符表示提取 称为提取运算符 输出就是向流中插入一个字节序列 用 运算符表示插入 称为插入运算符 这两个运算符分别定义在类ostream和istream中 2020 3 27 12 4 2 2标准流对象 例4 1 使用流cout和cerr实现数据的输出 includevoidmain void floata b cerr a b if b 0 cout a b a b n elsecerr 除数为零 n 2020 3 27 13 4 3I O流操作 I O流的格式化 iomanip h中预定义的格式控制符 2020 3 27 14 4 3I O流操作 控制输出格式的流成员函数 2020 3 27 15 4 3I O流操作 设置格式状态的格式标志 2020 3 27 16 4 3I O流操作 例4 2 用格式控制符setw hex dec指定输出数据的域宽和数制 include includevoidmain void inta 256 b 128 cout setw 8 a b b n Line1cout hex a b dec b n Line2 2020 3 27 17 4 3I O流操作 例4 3 数据进制之间的转换 include 因iomanip h中包含有iostream h 所以该命令也可省略 includevoidmain intx 30 y 300 z 1024 cout x y z endl 按十进制输出cout oct x y z endl 按八进制输出cout hex x y z endl 按十六进制输出 2020 3 27 18 4 3I O流操作 cout setiosflags ios showbase ios uppercase 设置基指示符和数值中的字母大写输出cout x y z endl 仍按十六进制输出cout resetiosflags ios showbase ios uppercase 取消基指示符和数值中的字母大写输出cout x y z endl 仍按十六进制输出cout dec x y z endl 按十进制输出 其输出结果 3030010243645420001e12c4000X1E0X12C0X41e12c400303001024 2020 3 27 19 4 3I O流操作 例4 4 使用setw控制符为同一行中输出的不同数据项分别指定宽度 include includeusingnamespacestd voidmain doublevalues 1 23 35 36 653 7 4258 24 char names Zoot Jimmy Al Stan for inti 0 i 4 i out setw 6 names i setw 10 values i endl 其输出结果 Zoot1 23Jimmy35 36Al653 7Stan4358 24 2020 3 27 20 4 3I O流操作 例4 5 使用cout的width成员函数控制输出宽度为10个字符宽 且按右对齐方式输出数值 include includeusingnamespacestd voidmain doublevalues 1 23 35 36 653 7 4258 24 char names Zoot Jimmy Al Stan for inti 0 i 4 i cout width 10 cout fill cout values i endl 其输出结果 1 23 35 36 653 7 4358 24 2020 3 27 21 4 3I O流操作 例4 6 控制数据输出精度 include includeusingnamespacestd voidmain doublevalues 1 23 35 36 653 7 4358 24 char names Zoot Jimmy Al Stan for inti 0 i 4 i cout setiosflags ios base left setw 6 names i resetiosflags ios base left setw 10 setprecision 1 values i endl 输出结果 Zoot1Jimmy4e 001Al7e 002Stan4e 003 2020 3 27 22 4 3I O流操作 输入输出流检测错误的操作 例4 7 输入不正确的数据时 导致程序出错 includevoidmain void inti s chart 80 cout i s cin rdstate cout s s n enumio state goodbit 0 x00 eofbit 0 x01 failbit 0 x02 badbit 0 x04 hardfail 0 x80 intrdstate inteof intfail intbad intgood intclear intflag 0 2020 3 27 23 4 3I O流操作 while s cin clear cin getline t 80 cout i s cin rdstate cout num i n 2020 3 27 24 4 3 2用流成员函数实现输入 输出 Put 函数 put函数把一个字符写到输入流中 Get 函数 非格式化函数的功能与提取运算符 很相像 get函数在读入数据时包括空白字符 Getline 函数 getline成员函数的功能是允许从输入流中读取多个字符 并且允许指定输入终止字符 默认值是换行字符 在读取完成后 从读取的内容中删除该终止字符 2020 3 27 25 4 3 2用流成员函数实现输入 输出 例4 8 put函数应用举例 有一个字符串 ENGLISH 要求按反序输出 includevoidmain char p ENGLISH for inti 6 i 0 i cout put p i cout put n 运行结果 HSILGNE 2020 3 27 26 4 3 2用流成员函数实现输入 输出 例4 9 get函数应用举例 从键盘接收字符并输出 includevoidmain charch while ch cin get EOF cout put ch 运行时输入 Abcxyz123 则输出结果 Abcxyz123 2020 3 27 27 4 3 2用流成员函数实现输入 输出 例4 10 getline函数应用举例 为输入流指定一个终止字符 本程序连续读入一串字符 直到遇到字符 t 时停止 字符个数最多不超过80个 includevoidmain charline 100 cout Typealineterminatedby t endl cin getline line 81 t cout line cout n 输入 abcdefghhht 输出结果 abcdefghhh 2020 3 27 28 4 4文件流和文件的输入 输出 使用一个文件流 应遵循以下步骤 打开一个文件 其目的是将一个文件流对象与某个磁盘文件联系起来 使用文件流对象的成员函数 将数据写入到文件中或从文件中读取数据 关闭已打开的文件 即将文件流对象与磁盘文件脱离联系 2020 3 27 29 4 4文件流和文件的输入 输出 定义一个文件对象 例如 ifstreaminfile 定义输入文件流对象outfileifstreaminfile filel txt ofstreamoutfile fstreamiofile 用文件流对象的成员函数open 或构造函数 打开一个文件 例如 outfile open file2 txt 用提取 插入运算或成员函数对文件读写 例如 infile ch 用完文件后 使用文件流对象的成员函数关闭文件 例如 infile close 2020 3 27 30 4 4 1用流成员函数实现输入 输出 文件流类常用成员函数 2020 3 27 31 4 4 1用流成员函数实现输入 输出 文件打开方式说明 2020 3 27 32 4 4 4文本文件的输入 输出 读写 例4 11 复制一个文本文件到一个目标文件当中 includevoidmain void charch f1 256 f2 256 cout f1 cout f2 ifstreamin f1 ios in ios nocreate 2020 3 27 33 4 4 4文本文件的输入 输出 读写 ofstreamout f2 if in cout ch out ch in close out close cout n复制完毕 n 2020 3 27 34 4 4 4文本文件的输入 输出 读写 例4 12 设文本文件data1 txt中有若干实数 每个实数之间用空格或换行符隔开 求出文件中的这些实数的平均值和实数的个数 includevoidmain void floatsum 0 t intcount 0 ifstreamin data1 txt ios in ios nocreate if in cout 不能打开输入文件 n return 2020 3 27 35 4 4 4文本文件的输入 输出 读写 while in t 依次读一个实数 sum t count cout n实数的平均值 sum count 实数的个数 count in close 可用记事本设置文件data1 txt的内容为 2050 930 746 68990 8245050程序运算结果 实数的平均值 50 222 实数的个数 9 2020 3 27 36 4 4 4文本文件的输入 输出 读写 例4 13 在现有data2 txt文件后面追加信息 include includeusingnamespacestd std是standard的缩写 标准C 中必须存在的一个名字 空间的名字 包含标准C 类库所有的名字 类名 函数名等 intmain cout Openingoutputfile endl ofstreamofile data2 txt ios app 2020 3 27 37 4 4 4文本文件的输入 输出 读写 if ofile fail cout Appendingtofile endl ofile 这是一个没有注释的例子 elsecout openfail endl return0 可用记事本建立文本文件data2 txt 并向文件写入 C 程序设计 2020 3 27 38 4 4 5二进制文件的输入 输出 读写 二进制文件的读操作用成员函数read istream 2020 3 27 39 4 4 5二进制文件的输入 输出 读写 二进制文件的写操作用成员函数write ostream 2020 3 27 40 4 4 5二进制文件的输入 输出 读写 例4 14 将1 100之间的所有偶数存入二进制文件data2 dat中 includevoidmain void ofstreamout data2 dat ios out ios binary Line1if out cout data2 dat n return for inti 2 i 100 i 2 out write char 2020 3 27 41 4 4 5二进制文件的输入 输出 读写 例4 15 写一个整型数组和一个浮点型数组到二进制文件data3 dat中 然后从data3 dat中读取数据 并显示 include includevoidmain inti number 5 10 20 30 40 50 floatf number 5 1 53 2 2 3 0 4 0 5 55 intint arr 5 floatfloat arr 5 ofstreamout data3 dat 打开一个文件if out cout cannotopendata3 n return 2020 3 27 42 4 4 5二进制文件的输入 输出 读写 out write unsignedchar 2020 3 27 43 4 4 5二进制文件的输入 输出 读写 for inti 0 i 5 i 显示浮点数 cout float arr i cout endl for i 0 i 5 i 显示整数 cout int arr i cout endl cout 程序执行完毕 n return 运行结果 1 532 2345 551020304050 2020 3 27 44 4 4 6文件的随机访问 C 把文件看作有序的n个字节的流 2020 3 27 45 4 4 6文件的随机访问 对于输入流来说 用于文件读写位置定的成员函数有 istream 返回当前文件读写位置 2020 3 27 46 4 4 6文件的随机访问 例4 16 将5 200之间的奇数存入二进制文件 然后再将文件中的第30 39位置之间的数依次读出并输出 includevoidmain void inti x ofstreamout data3 dat ios out ios binary if out cout 不能打开文件d dat n return for i 5 i 200 i 2 out write char 2020 3 27 47 4 4 6文件的随机访问 ifstreamf data3 dat ios in ios binary if f cout 不能打开文件d dat n return f seekg 30 sizeof int 文件指针移到指定位置for i 0 i 10 2020 3 27 48 4 5字符串流 建立输出字符串流对象 ostrstream类提供的构造函数的原型为 ostrstream ostrstream char buffer intn intmode ios out 建立输入字符串流对象istrstream类提供了两个带参的构造函数 istrstream类提供的构造函数的原型为 istrstream istrstream char buffer istrstream istrstream char buffer intn 建立输入输出字符串流对象 strstream类提供的构造函数的原型为 strstream strstream char buffer intn intmode 2020 3 27 49 4 5字符串流 例4 17 提取一个字符串中的每一个整数 并把它们依次存入到一个字符串流中 最后向屏幕输出这个字符串流 字符串从键盘输入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论