第7章-C++的IO流_V2_第1页
第7章-C++的IO流_V2_第2页
第7章-C++的IO流_V2_第3页
第7章-C++的IO流_V2_第4页
第7章-C++的IO流_V2_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第7章C+的I/O流,内容提要,1输入输出(I/O)流2输入输出的格式控制3用户自定义类型的输入和输出4文件的I/O操作,7.1.输入输出(I/O)流,1什么是流,流字符序列在主机与外部介质之间流动的抽象。流包含输入输出的数据传递操作(I/O),主机,外部设备,输出Output,输入Input,流,1什么是流(续),当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象。流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。,2C+为什么引入流,1、C语言提供的输入输出功能弱:scanf和printf只能识别系统预定义的类型。2、引入面向对象的方法:操作不同类型的对象。3、可以通过重载进行功能扩充:比如重载“”符号(插入和提取运算符)。,3C+的流及流类库,C本身无专门的输入输出语句,IO操作由流类库完成流类库(流类的集合)是用继承方法建立流对象与特定的设备相联系,4输入和输出流,输出流1、cout:输出流ostream类的一个预定义对象,与标准输出设备(终端屏幕)相联系,ostream中重载了运算符(插入运算符)2、插入运算符运算符(提取运算符)2、提取运算符:istream,7.2.输入输出的格式控制,1ios类的格式控制成员函数,ios类中定义的格式成员函数:,classiospublic:intwidth(intw);/设置字段宽度intwidth()const;/返回设置字段的宽度charfill(char);/设置填充字符charfill()const;/返回设置的填充字符longflags(longf);longsetf(longsetbits,longfield);longsetf(long);/设置状态标志字longunsetf(long);intprecision(int);/设置浮点数精度intprecision()const;/返回设置的浮点数精度/;,1ios的格式控制成员函数(续),输入流:charbuffer20;cin.width(20);cinbuffer;输出流:cout.width(4);cout(12);cout.width(4);cout.fill(#);cout(12);,(12),(#12),Width()作用于输入/输出的数字或串,2标志状态字,函数setf(longflags)参数flags为32位的状态字4个字节通过设置状态字也可以进行格式控制具体32位每位的作用见下页:,2标志状态字(续),classiospublic:enumskipws=0 x0001,left=0 x0002,right=0 x0004,internal=0 x0008,dec=0 x0010,oct=0 x0020,hex=0 x0040,showbase=0 x0080,showpoint=0 x0100,uppercase=0 x0200,showpos=0 x0400,scientific=0 x0800,fixed=0 x1000,unitbuf=0 x2000,stdio=0 x4000;/;,2标志状态字(续),状态字的使用:,#includemain()coutsetf(ios:showpos|ios:scientific);cout567“”567.89endl;,输出结果为:+567+5.6789e2,3控制符,使用状态字不方便,可以使用控制符如:intx=1,y=2;coutsetw(5)xsetw(4)y;,预定义控制符有:hexdecoct指定基数,缺省decws用于输入流,略去空白endl换行ends插入一个NULL(0)字符,结束一个字符串flush强制将流从缓冲区写入相应设备setfill(charf)设置填充字符,缺省委空格setprecision(intp)设浮点数精度,缺省为6.,3控制符(续),自定义控制符格式:iostream,ostream,输出结果为:7bpublic:friendostream,1重载插入运算符(续),当进行了运算符重载后,就可以使用,重载运算符“”的一般格式如下:,#includeiostream.h“istream,第二个参数是要输入输出的对象,第一个参数是流,返回流的引用,2重载提取运算符,重载运算符“”的例子:思考一下:cinc1c2;将被编译器如何解释(如何写出函数形式)?,classComplexdoublerpart,ipart;public:friendistream,7.4.文件的I/O操作,1文件和流,处理文件的类在fstream.h中定义文件输入输出:1、创建流对象2、使用流的成员函数打开文件操作文件的两个类1、ofstream2、ifstream,1文件和流(续),输出文件流类ofstream输出文件流成员函数open函数把流与一个特定的磁盘文件关联起来。需要指定打开模式。put函数把一个字符写到输出流中。插入运输符把基本类型或类类型数据提取(读)到输入流中。,1文件和流(续),输入文件流成员函数read函数从一个文件读字节到一个指定的内存区域,由长度参数确定要读的字节数。如果给出长度参数,当遇到文件结束或者在文本模式文件中遇到文件结束标记字符时结束读取。seekp和tellp函数操作文件流的内部指针,1文件和流(续),输入文件流成员函数Getline函数功能是从输入流中读取多个字符,并且允许指定输入终止字符,读取完成后,从读取的内容中删除终止字符。close函数关闭与一个输入文件流关联的磁盘文件,1文件和流(续),输出文件流简单举例,#include/必需的头文件structDateintmo,da,yr;voidmain()Datedt=0,0,0;ifstreamtfile(date.dat,ios:binary);tfile.read(char*),2文件的打开与关闭,文件的读写操作都要进行打开和关闭打开是程序和(外设)文件关联过程关闭是文件操作后的收尾工作,如添加文件结束符号(标志)忘记文件关闭常常会使文件操作失效一个好的习惯是:open和close成对出现,编写有open的代码后,立刻编写有close的代码,避免遗忘!,2文件的打开与关闭(续),文件打开和关闭的简单例子:,#include#includevoidmain()ofstreammy_file;my_file.open(“hello.dat”,ios:out);/中间进行写文件的操作my_file.close();,3文件的读写综合示例,文件读和文件指针控制的例子,#include/必需的头文件#includevoidmain()charch;/声明ifstream对象tfileifstreamtfile(“data,ios:binary);/待续,3文件的读写综合示例(续),/续if(tfile)/如果文件打开成功tfile.seekg(8);while(tfile.good()tfile.get(ch);if(!ch)break;coutch;elsecoutERROR:Cannotopenfileendl;tfile.close();/main结束,3文件的读写综合示例(续),从文件读二进制记录,#include/不带.h的头文件使用方法#includeusingnamespacestd;structdoublesalary;charname23;employee;/待续,3文件的读写综合示例(续),/续上页voidmain()ifstreamis(“data,ios:binary|ios:nocreate);if(is)/is文件打开成功is.read(char*),3文件的读写综合示例(续),读文件并显示其中空格的位置,#include/不带.h的头文件使用方法#include/不带.h的头文件使用时必须using名字空间usingnamespacestd;voidmain()charch;/读字符用ifstreamtfile(“data,ios:binary|ios:nocreate);/待续,3文件的读写综合示例(续),/续上页if(tfile)while(tfile.good()stream

温馨提示

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

评论

0/150

提交评论