第10章 输入输出流_第1页
第10章 输入输出流_第2页
第10章 输入输出流_第3页
第10章 输入输出流_第4页
第10章 输入输出流_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

第10章输入输出流 课程要求 1 深入理解C 的输入输出流的含义与其实现方法 2 掌握标准输入输出流的应用 包括格式输入输出 3 掌握文本文件和二进制文件的读写方法 4 掌握文件的随机存取方法 5 掌握字符串流的应用 主要内容 10 1C 的输入输出10 2标准输入输出流10 3文件操作与文件流10 4字符串流 10 1C 的输入输出 C 的输入输出是以流 字节序列 的形式进行的 C 的输入输出主要有以下三种 1 对系统指定的标准设备的输入输出 即标准I O 2 以外存磁盘文件为对象进行的输入输出 称为文件的输入输出 3 对内存指定的空间进行输入输出 10 1 1C 流的概念 1 流与流类C 的输入输出流是由若干字节组成的字节序列 这些字节中的数据按一定的顺序从一个对象传送到另一个对象 C 提供了一些供程序设计者使用的类 在这些类中封装了可以实现输入输出操作的函数 这些类统称为I O流类 流是用流类定义的对象 如cin cout2 流的分类 1 文本流和二进制流 按照数据的格式 2 缓冲流与非缓冲流 按是否使用缓冲区 10 1 2C 流类库 C 的流类库是用继承方法建立起来的输入输出类库 由支持标准输入输出操作的基类和支持特定种类的源和目标的输入输出操作的类组成 它具有两个平行的基类 所有其它的流类都是从它们直接或间接地派生出来的 streambuf类 提供对流缓冲区的低级操作ios类 提供对设备 文件的读写操作 C 流类体系 1 通用I O流类库 1 基类ios 2 输入类istream 3 输出类ostream 4 输入输出类iostream2 文件I O流类库 1 ofstream类 2 ifstream类 3 fstream类3 字符串I O流类库 1 ostrstream类 2 istrstream类 3 strstream类 10 1 3与iostream类库有关的头文件 1 iostream h 包含对输入输出流进行操作的基本信息 提供无格式支持的低级输入输出和有格式支持的高级输入输出操作功能 2 fstream h 包含管理文件输入输出操作的有关信息 3 strstrea h 包含对内存中数据进行输入输出操作的有关信息 4 stdiostream h 包含进行C风格的输入输出操作的有关信息 5 iomanip h 包含输入输出流的格式控制符 manipulator 的有关信息 当一个程序中需要进行标准流输入输出操作时 则必须包含头文件iostream h 当需要进行文件流输入输出操作时 则必须包含头文件fstream h 当需要进行字符串流读 写操作时 则必须包含头文件strstream h 10 1 4插入与提取运算符的重载 本来在C 中被定义为左位移运算符和右位移运算符 由于在文件iostream h中对它们进行了重载 使得它们能用作标准类型数据的输入输出运算符 从流中获取数据的操作称为提取操作 使用提取运算符 向流中添加数据的操作称为插入操作 使用插入运算符 10 2标准输入输出流10 2 1标准流类 标准流是不需要打开和关闭文件即可直接操作的流式文件 cin 类istream的对象 用来处理标准输入 即键盘输入 cout 类ostream的对象 用来处理标准输出 即屏幕输出 cerr和clog 类ostream的对象 与错误信息的标准输出设备 屏幕 相关联 前者为非缓冲方式 后者为缓冲方式 1 标准输入流cin是由输入类istream的派生类istream withassign定义的对象 在缺省的情况下 cin所关联的外部设备为键盘 实现从键盘上输入数据 cin为缓冲流 2 标准输出流在C 流类体系中定义的标准输出流是cout cerr clog 是由输出类ostream的派生类ostream withassign定义的对象 在缺省的情况下 cout cerr clog所关联的外部设备为屏幕 实现数据流输出到屏幕 cout clog为缓冲流 而cerr为非缓冲流 10 2 2格式控制成员函数 数据输出的格式控制可通过两种途径实现 使用预定义格式控制符带参数 如setw n 的 在头文件iomanip h中定义不带参数 如dec 的 在头文件iostream h中定义使用由ios类定义的格式控制成员函数 在头文件iostream h中说明 1 输出宽度和填充字符输出宽度和填充字符可通过由ios类中定义的输出域宽控制成员函数width n 和填充成员函数fill c 实现 其中n为输出数据的宽度 c为填充字符 例10 2 使用成员函数控制输出宽度及填充方式 ex10 2 cpp includevoidmain floata 2345 679 cout fill for inti 0 i 5 i cout width i 6 cout a endl 程序运行后输出 2345 682345 68 2345 68 2345 68 2345 68 2 其它格式控制若要改变流的其它输出格式 如对齐方式 可使用ios类中定义的成员函数setf来实现 函数格式如下 cout setf 格式标志 格式标志在类ios中被定义为枚举值 在引用这些格式标志时要在前面加上类名ios和域运算符 例10 3 将学生姓名与比赛得分通过初始化赋给数组name 5 score 5 指定姓名域宽为10个字符 左对齐 比赛得分为右对齐 用定点方式 小数点后有2位有效数字 分析 浮点数默认的输出精度为6 即输出6位有效数字 例如浮点数3456 7891显示为3456 79 若要实现指定小数点后显示几位有效数字 应先用setf设置定点方式 再用成员函数precision n 设置小数点后n位有效数字 include includevoidmain void char name Zhou Zhao Liu Chen Li doublescore 89 87 2 78 33 91 444 85 5555 for inti 0 i 5 i cout setf ios left 设置左对齐cout width 10 设置域宽为10cout name i cout unsetf ios left cout setf ios fixed 设置定点方式cout precision 2 设置小数点后2位有效数字cout score i n 程序运行后 输出如下 Zhou89 00Zhao87 20Liu78 33Chen91 44Li85 56 10 2 3数据输入输出成员函数 1 数据输入成员函数 1 字符输入成员函数成员函数get 可以从输入流中获取字符 并将它存放在指定的变量中 该函数有以下两种格式 ch cin get cin get ch 函数实现从输入流中读取一个字符 赋给字符变量ch 采用第2种格式时 如果读取数据成功则函数返回非0值 真 否则 遇结束标志符 返回0值 假 例10 4 读取字符 ex10 4 cpp includevoidmain void charc1 c2 c3 cout 输入字符 c1 cin get cin get c2 cin get 读入空白字符cin get c3 cout c1 c1 endl cout c2 c2 endl cout c3 c3 endl 输入字符 ab c c1 ac2 bc3 c 2 字符串输入成员函数从输入流中一次读取一串字符 有以下2种方式 cin get 字符数组或字符指针 字符个数n 终止字符 cin getline 字符数组或字符指针 字符个数n 终止字符 从输入流中读取n 1个字符 赋给指定的字符数组 或字符指针指向的数组 如果在读取n 1个字符之前遇到指定的终止字符 则提前结束读取 如果读取成功则函数返回非0值 真 否则 遇文件结束符 返回0值 假 第三个参数缺省为换行符 例10 5 读取字符串 ex10 5 cpp includevoidmain void charstr1 20 str2 20 cout 输入一行字符串 cin getline str1 20 cin get str2 20 cout str1 str1 endl cout str2 str2 endl 程序运行结果如下 输入2行字符串 Thisisabook Thisisabook str1 Thisisabook str2 Thisisabook 2 数据输出成员函数 1 字符输出成员函数函数put 用于输出单个字符 格式如下 cout put charc put函数的参数c可以是字符或字符的ASCII码 例如 cout put a 在屏幕上显示字符a 2 字符串输出成员函数函数write 用于输出一个指定长度的字符串 格式如下 cout write 字符串 字符个数n 例如 cout write Thisisabook n 20 10 3文件操作与文件流 10 3 1文件的概念1 文件文件 File 指存储于外部介质上的信息集合 分为文本文件和二进制文件 文本文件以字节 byte 为单位 每字节为一ASCII码 代表一个字符 故又称字符文件 二进制文件又称为内部文件或字节文件 是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放 例如整数1025 以文本形式 31003236H 存储占用四个字节 以二进制形式 0401H 存储则只占用两个字节 2 文件的操作文件操作分成4步 1 定义文件流对象ifstream文件输入流对象 ofstream文件输出流对象 fstream文件输入 出流对象 2 打开文件文件流对象 open 磁盘文件名 输入输出模式 也可以在定义文件流对象时指定文件打开模式 在构造过程中打开该文件 定义方式如下 ifstream文件流对象 磁盘文件名 输入输出模式 ofstream文件流对象 磁盘文件名 输入输出模式 fstream文件流对象 磁盘文件名 输入输出模式 3 读 写文件 4 关闭文件文件流对象 close 10 3 2文本文件的读写 1 使用提取运算符或插入运算符对文件进行读写操作 例10 6 使用提取运算符和插入运算符将源文件中的前100个字符复制到目标文件中 includevoidmain void charfname1 20 fname2 20 cout fname1 cout fname2 ifstreaminfile fname1 定义文件输入流对象 打开源文件if infile cout 不能打开输入文件 fname1 endl return ofstreamoutfile fname2 定义文件输出流对象 打开目标文件if outfile cout ch 从源文件中提取一个字符到变量ch中 outfile ch 将ch中的字符写入目标文件中 i i 1 infile close 关闭源文件outfile close 关闭目标文件 2 使用成员函数进行文件的读写操作 例10 7 使用成员函数get与put将源文件的内容复制到目标文件中分析 先打开源文件和目标文件 依次从源文件中读取一个字符 并将所读字符写入目标文件中 直到源文件中所有字符读完为止 includevoidmain void charfname1 20 fname2 20 cout fname1 cout fname2 ifstreaminfile 定义文件输入流对象infile open fname1 ios in ios nocreate 打开源文件if infile cout 源文件不存在 fname1 endl return ofstreamoutfile 定义文件输出流对象outfile open fname2 ios out ios noreplace 打开目标文件if outfile cout 目标文件已存在 不能新建目标文件 fname2 endl return charch while infile get ch 从源文件中提取一个字符到变量ch中 outfile put ch 将ch中的字符写入目标文件中 infile close outfile close 10 3 3二进制文件的读写 1 二进制文件的写操作二进制文件的写操作是通过成员函数write 来实现 write 字符数组或字符指针 字节数 2 二进制文件的读操作二进制文件的读操作是通过成员函数read 来实现 read 字符数组或字符指针 字节数 3 测试文件结束测试二进制文件结束位置可用成员函数eof 实现 当到达文件结束位置时 该函数返回零值 否则返回非零值 4 返回读入数据的长度返回最近一次输入所读入的字节数可用成员函数gcount 实现 10 3 4文件的随机读写 从文件中任何位置开始进行读或写数据 这种读写方式称为文件的随机访问或直接存取 1 文件定位C 的类库fstream中定义了两个与文件相联系的指针读指针写指针C 的文件定位分为读位置和写位置的定位 对应的成员函数seekg 设置读位置Seekp 设置写位置 1 读操作定位相对文件头指针移动n个字节seekg 位移量n 相对参照位置指针移动n个字节seekg 位移量n 参照位置 参照位置可取三个值 io3 beg或0 文件头 io3 cur或1 文件指针当前的位置 io3 end或2 文件尾 2 写操作定位文件写操作的定位是通过成员函数seekp实现的 seekp 位移量n seekp 位移量n 参照位置 2

温馨提示

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

评论

0/150

提交评论