c++输入输出流及文件操作详解.ppt
《c++输入输出流及文件操作详解.ppt》由会员分享,可在线阅读,更多相关《c++输入输出流及文件操作详解.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7 7章章 输入输出流输入输出流本本 章章 内内 容容-第一讲第一讲 1、输入输出流的含义输入输出流的含义 流类与流对象流类与流对象2、标准输入输出流、标准输入输出流p标准标准IO流对象流对象 pIO流成员函数流成员函数 -get(),getline()与与 -put(),p 流状态及函数流状态及函数 clear(),good(),eof()本本 章章 内内 容容 -第二讲第二讲3、文件流及文件操作、文件流及文件操作 p 文件的概念文件的概念 数据流动方向,数据流动方向,文本文件与二进制文件文本文件与二进制文件p 文件流类与文件流对象文件流类与文件流对象p 文件的打开与关闭文件的打开与关闭
2、 打开方式打开方式p 顺序读写顺序读写/随机读写操作随机读写操作 文件指针文件指针p文件操作成员函数文件操作成员函数 ,put,get(),getline(),read(),write()第第7 7章章 输入输出流输入输出流p流流(stream)表示信息从源到目的端的流动,表示信息从源到目的端的流动,负责建立数据生产者和消费者之间的联系,负责建立数据生产者和消费者之间的联系,数据按顺序从一个对象传送到另一对象。数据按顺序从一个对象传送到另一对象。C+中把数据之间的传输操作称作中把数据之间的传输操作称作”流流”I/O系统的任务就是在内存和外部设备之间稳定可靠系统的任务就是在内存和外部设备之间稳定
3、可靠 地传输数据和解释数据。地传输数据和解释数据。程序中,对数据的输入程序中,对数据的输入/输出是以输出是以字节流字节流实现的实现的 应用程序对字节序列作出各种数据解释应用程序对字节序列作出各种数据解释.C+的输入输出流是指由若干的输入输出流是指由若干字节字节组成的字节序列组成的字节序列 流中的内容可以是流中的内容可以是ASCII字符、图形图像、数字音频字符、图形图像、数字音频视频等形式的信息。视频等形式的信息。7.1 IO7.1 IO流流7.1 IO7.1 IO流流 I/O流类库提供对象之间的数据交互服务流类库提供对象之间的数据交互服务 输出流输出流Output stream:数据从内存传送
4、到某个载体或设备中;数据从内存传送到某个载体或设备中;输入流输入流 Input stream:数据从某个载体或设备传送到内存中数据从某个载体或设备传送到内存中;_内存内存_输入数据输入数据输出数据输出数据7.1.1 缓冲区缓冲区o缓冲区缓冲区buffer是内存中的一个临时存储区,是内存中的一个临时存储区,用来匹配不同部件数据传输率的差异。用来匹配不同部件数据传输率的差异。通过使用缓冲的方式可以更高效地处理输入输出,通过使用缓冲的方式可以更高效地处理输入输出,信息从设备和程序之间传输时可临时存储在缓冲区中,信息从设备和程序之间传输时可临时存储在缓冲区中,等待累积成数据块或合适的事机再传送的目的地
5、。等待累积成数据块或合适的事机再传送的目的地。在在C+中输入输出流被定义为类,中输入输出流被定义为类,I/O库中的类称为流类,库中的类称为流类,编译系统提供了用于输入输出的编译系统提供了用于输入输出的iostream类库。类库。流类中的常用类的继承层次关系流类中的常用类的继承层次关系 7.1.2 7.1.2 流类流类 (1)标准流)标准流 提供通用输入输出操作提供通用输入输出操作,作为其他作为其他I/O流基类流基类 系统指定的标准设备的系统指定的标准设备的I/O操作。操作。(2)文件流)文件流 以外存中的文件为对象进行输入和输出。以外存中的文件为对象进行输入和输出。以文件为对象的输入输出,包括
6、从磁盘文件输入数据,以文件为对象的输入输出,包括从磁盘文件输入数据,或将数据输出到磁盘文件。或将数据输出到磁盘文件。(3)字符串流)字符串流 对内存中指定空间进行输入和输出。对内存中指定空间进行输入和输出。通常指定一个字符数组作为存储空间。通常指定一个字符数组作为存储空间。7.1.2 7.1.2 流类流类 iostream.h 包含操作所有输入包含操作所有输入/输出流所需的基本信息输出流所需的基本信息 istream.h,ostream.h iomanip.h 包含格式化包含格式化I/O操纵算子,用于指定数据输入输出的格式操纵算子,用于指定数据输入输出的格式 fstream.h 处理文件信息,
7、包括建立文件,读处理文件信息,包括建立文件,读/写文件的各种操作接口写文件的各种操作接口 每一种每一种C+版本通常还包含其他一些与版本通常还包含其他一些与I/O相关的库,提供特定系统的某些功能相关的库,提供特定系统的某些功能7.1.2 7.1.2 头文件头文件 I/O流类库预定义了一批流对象,连接常用的外部设备流类库预定义了一批流对象,连接常用的外部设备.程序员可以定义所需的程序员可以定义所需的I/O流对象,流对象,使用流库提供的工作方式实现数据传输。使用流库提供的工作方式实现数据传输。流类对象可以建立和删除,可从流中获取数据和向流添加数据。流类对象可以建立和删除,可从流中获取数据和向流添加数
8、据。7.1.3 7.1.3 流对象流对象istream cinostream cout输入流对象输入流对象_内存内存_输出流对象输出流对象7.2 标准流对象及常用成员函数标准流对象及常用成员函数o标准流对象是在标准流对象是在std命名空间中定义的流对象,命名空间中定义的流对象,提供内存与常用外部设备进行数据交互功能。提供内存与常用外部设备进行数据交互功能。声明在头文件声明在头文件iostream 7.2.1 7.2.1 标准输出流标准输出流 o cout ostream 类的对象(类的对象(console output)通常连向显示器,可以重定向(关联至文件)通常连向显示器,可以重定向(关联至
9、文件)在输出流类中重载在输出流类中重载的一组公用成员函数,实现安全便捷的一组公用成员函数,实现安全便捷的输出基本数据类型,的输出基本数据类型,输出自定义类型对象需要单独重载输出自定义类型对象需要单独重载 ostream&operator (基本类型标识符);(基本类型标识符);cout流在内存中流在内存中对应对应开辟了一个开辟了一个缓缓冲区,用来存放流中的数据。冲区,用来存放流中的数据。流插入运算符流插入运算符o标准错误流对象标准错误流对象cerr(console error)o标准错误流对象标准错误流对象clog(console log的的)作用都是在标准输出设备上显示出错信息,作用都是在标
10、准输出设备上显示出错信息,两个对象一般关联显示进行器输出。两个对象一般关联显示进行器输出。区别是区别是 cerr不经过缓冲区,直接向显示器上输出有不经过缓冲区,直接向显示器上输出有关信息,而关信息,而clog中的信息存放在缓冲区中,缓冲区中的信息存放在缓冲区中,缓冲区满后或遇满后或遇endl时输出。时输出。7.2.1 标准输出流标准输出流 cerr “Zero encountered.“endl;7.2.1 7.2.1 标准输出流标准输出流 ostreamostream类的公有成员函数类的公有成员函数 函数函数功能功能put无格式无格式,插入一个字节插入一个字节write从无格式从无格式,插入
11、一字节序列插入一字节序列flush刷新输出流刷新输出流seekp移动输出流指针移动输出流指针tellp返回输出流中指定位置的指针值返回输出流中指定位置的指针值operstor”从流中提取数据。从流中提取数据。7.2.2 7.2.2 标准输入流标准输入流 o cinistream类的对象,它从标准输入设备类的对象,它从标准输入设备(键盘键盘)获取数据,获取数据,程序中的变量通过流提取符程序中的变量通过流提取符“”从流中提取数据。从流中提取数据。在在istream流类重载中流类重载中的一组公用成员函数的一组公用成员函数 istream&operator(基本类型标识符(基本类型标识符&););流提
12、取符从流中提取数据时通常跳过输入流中的空格、流提取符从流中提取数据时通常跳过输入流中的空格、tab键、换行键、换行符等空白字符。符等空白字符。只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符才能从中提取数据。形成输入流,提取运算符才能从中提取数据。函数函数功能功能read无格式输入指定字节数无格式输入指定字节数get从流中提取字符,包括空格从流中提取字符,包括空格getline从流中提取一行字符从流中提取一行字符ignore提取并丢弃流中指定字符提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中
13、删除返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数统计最后输入的字符个数eatwhite忽略前导空格忽略前导空格seekg移动输入流指针移动输入流指针tellg返回输入流中指定位置的指针值返回输入流中指定位置的指针值operstor提取运算符提取运算符,不包括空格、不包括空格、Tab和回车分隔符和回车分隔符istreamistream类的公有成员函数类的公有成员函数 流插入运算符流插入运算符 ,可用于输入基本类型数据可用于输入基本类型数据,也可重载也可重载用于输出和输入用户自定义的数据类型用于输出和输入用户自定义的数据类型 7.2.3 7.2.3 重载流插入和流提取运算符
14、重载流插入和流提取运算符 重载函数形式重载函数形式:ostream&operator (istream&in,T&data);注意:只能将重载注意:只能将重载“”和和“”的函数作为的函数作为友元函数友元函数。自定义类自定义类 class Array public:Array(int size=1);Array();int&operator(int i);friend ostream&operator (istream&in,Array&a);private:int*element;int len;例例 为数组类重载流插入运算符和提取运算符为数组类重载流插入运算符和提取运算符 Array a(5
15、);cin a;cout a;6.3.4 重载流插入和流提取运算符使用重载版本访问对象使用重载版本访问对象 cout a arr1 arr2;cin 的别名的别名函数函数功能功能read无格式输入指定字节数get从流中提取字符,包括空格从流中提取字符,包括空格getline从流中提取一行字符从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符提取运算符istreamistream类的公有成员函数类的公有成
16、员函数 7.2.4 7.2.4 输入流操作输入流操作int istream:get();/char c=cin.get();istream&istream:get(char&rch);/cin.get(c);ostream&put(char ch);get.cpp函数函数功能功能read无格式输入指定字节数get从流中提取字符,包括空格从流中提取字符,包括空格getline从流中提取一行字符从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定
17、位置的指针值operstor提取运算符istreamistream类的公有成员函数类的公有成员函数 7.2.4 7.2.4 输入流操作输入流操作 istream&get(char*pch,int nCount,char delim=n);istream&getline(char*pch,int nCount,char delim=n);其作用是从输入流中读取n-1个字符,赋给指定的字符数组,如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。读取完成后,从流中删除该终止符。读取完成后,从流中删除该终止符。
18、Get_getline.cpp7.2.4 7.2.4 输入流操作输入流操作 /字符串的输入字符串的输入 char ch120,ch220,ch320,ch420;cinch1;coutch1endl;cin.get(ch2,10);coutch2endl;cin.get(ch3,20);coutch3endl;cin.get(ch4,20,.);coutch4提取运算符提取运算符istream&ignore(int nCount=1,int delim=EOF);istreamistream类的公有成员函数类的公有成员函数 7.2.4 7.2.4 输入流操作输入流操作标识常量标识常量值值意义意
19、义ios:goodbit0 x00状态正常状态正常ios:eofbit0 x01文件结束符,当文件结尾时设置该标志文件结束符,当文件结尾时设置该标志ios:failbit0 x02I/O操作失败,数据未丢失,可以恢复操作失败,数据未丢失,可以恢复ios:badbit0 x04非法操作,数据丢失,不可恢复非法操作,数据丢失,不可恢复0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 1 00 0 0 0 0 0 0 0 0 0 0 0 0 1 0 07.2.5 7.2.
20、5 流错误状态流错误状态所有流都把流的状态存储在状态字中所有流都把流的状态存储在状态字中不同标志位中存储不同的错误状态位不同标志位中存储不同的错误状态位包含在类包含在类ios的的enum成员中成员中 ios ios 处理流错误状态的公有成员函数处理流错误状态的公有成员函数 函数函数功能功能int eof()const;返回返回eofbit状状态值态值。文件文件结结束符束符时时返回返回1,否,否则则返回返回0 int fail()const;返回返回failbit状状态值态值int bad()const;返回返回badbit状状态态int good()const;eofbit、failbit和和
21、badbit都没有被都没有被设设置,置,则则返回返回1 int rdstate()const;返回状返回状态态字字void clear(int n=0);恢复或恢复或设设置状置状态态字字7.2.4 7.2.4 流错误状态流错误状态运行程序,观测结果运行程序,观测结果 grade.cpp streamstate.cpp ios提供直接设置标志字的控制格式函数提供直接设置标志字的控制格式函数 iostream和和iomanip库还提供控制符简化库还提供控制符简化I/O格式化操作格式化操作(自学内容)(自学内容)7.3 7.3 格式控制格式控制ios类类格式化标志格式化标志o格格式式化化标标志志是是
22、类类定定义义的的枚枚举举集集合合,用用来来指指定定输输入入输输出格式化和操作的不同选择。出格式化和操作的不同选择。o该枚举类型定义:该枚举类型定义:enum skipws,left,right,internal,dec,oct,hex,showbase,showpoint,uppercase,showpos,scientific,fixed,unitbuf,stdio ;o引用格式化标志:引用格式化标志:ios:格式化标志格式化标志7.3.1 7.3.1 设置标志字设置标志字状态标志状态标志 值值 含义含义 输入输入/输出输出skipws 0X0001跳过输入中的空白Ileft 0X0002左
23、对齐输出Oright 0X0004右对齐输出Ointernal 0X0008在符号位和基指示符后填入字符Odec 0X0010转换基制为十进制I/Ooct 0X0020转换基制为八进制I/Ohex 0X0040转换基制为十六进制I/Oshowbase 0X0080在输出中显示基指示符Oshowpoint 0X0100输出时显示小数点Ouppercase 0X0200十六进制输出时一律用大写字母Oshowpos 0X0400正整数前加“+”号Oscientific 0X0800科学示数法显示浮点数Ofixed 0X1000定点形式显示浮点数Ounitbuf 0X2000输出操作后立即刷新流Ost
24、dio 0X4000输出操作后刷新stdout 和 stdreeOios 的标志常量的标志常量7.3.1 7.3.1 设置标志字设置标志字ios 控制格式的函数控制格式的函数函数函数功能功能long flags(long lFlags);long flags()const;用参数用参数lFlags更新标志字更新标志字返回标志字返回标志字long setf(long lFlags);设置设置lFlags指定的标志位指定的标志位long unsetf(long lFlags);将参数将参数lMask指定的标志位清指定的标志位清0 int width(int nw);设置下一个输出项的显示宽度为设置
25、下一个输出项的显示宽度为nwchar fill(char cFill);空白位置以字符参数空白位置以字符参数cFill填充填充 int precision(int np);用参数用参数np设置数据显示精度设置数据显示精度/例例4 设置输出宽度设置输出宽度#include void main()char*s=Hello;cout.fill(*);/置填充符置填充符 cout.width(10);/置输出宽度置输出宽度 cout.setf(ios:left);/左对齐左对齐 cout s endl;cout.width(15);/置输出宽度置输出宽度 cout.setf(ios:right,ios
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 输入输出 文件 操作 详解
限制150内