c++输入输出流及文件操作详解.ppt
《c++输入输出流及文件操作详解.ppt》由会员分享,可在线阅读,更多相关《c++输入输出流及文件操作详解.ppt(88页珍藏版)》请在三一办公上搜索。
1、第7章 输入输出流,7.1 流类和流对象,7.2 标准IO流和流对象,7.3 格式控制,7.4 文件处理,本 章 内 容-第一讲,1、输入输出流的含义 流类与流对象2、标准输入输出流标准IO流对象 IO流成员函数-get(),getline()与-put(),流状态及函数 clear(),good(),eof(),本 章 内 容-第二讲,3、文件流及文件操作 文件的概念 数据流动方向,文本文件与二进制文件 文件流类与文件流对象 文件的打开与关闭 打开方式 顺序读写/随机读写操作 文件指针文件操作成员函数,put,get(),getline(),read(),write(),第7章 输入输出流,
2、流(stream)表示信息从源到目的端的流动,负责建立数据生产者和消费者之间的联系,数据按顺序从一个对象传送到另一对象。,C+中把数据之间的传输操作称作”流”,I/O系统的任务就是在内存和外部设备之间稳定可靠 地传输数据和解释数据。程序中,对数据的输入/输出是以字节流实现的 应用程序对字节序列作出各种数据解释.C+的输入输出流是指由若干字节组成的字节序列 流中的内容可以是ASCII字符、图形图像、数字音频视频等形式的信息。,7.1 IO流,7.1 IO流,I/O流类库提供对象之间的数据交互服务 输出流Output stream:数据从内存传送到某个载体或设备中;输入流 Input stream
3、:数据从某个载体或设备传送到内存中;,_内存_,输入数据,输出数据,7.1.1 缓冲区,缓冲区buffer是内存中的一个临时存储区,用来匹配不同部件数据传输率的差异。通过使用缓冲的方式可以更高效地处理输入输出,信息从设备和程序之间传输时可临时存储在缓冲区中,等待累积成数据块或合适的事机再传送的目的地。,在C+中输入输出流被定义为类,I/O库中的类称为流类,编译系统提供了用于输入输出的iostream类库。流类中的常用类的继承层次关系,7.1.2 流类,(1)标准流 提供通用输入输出操作,作为其他I/O流基类 系统指定的标准设备的I/O操作。(2)文件流 以外存中的文件为对象进行输入和输出。以文
4、件为对象的输入输出,包括从磁盘文件输入数据,或将数据输出到磁盘文件。(3)字符串流 对内存中指定空间进行输入和输出。通常指定一个字符数组作为存储空间。,7.1.2 流类,iostream.h 包含操作所有输入/输出流所需的基本信息 istream.h,ostream.h iomanip.h 包含格式化I/O操纵算子,用于指定数据输入输出的格式 fstream.h 处理文件信息,包括建立文件,读/写文件的各种操作接口 每一种C+版本通常还包含其他一些与I/O相关的库,提供特定系统的某些功能,7.1.2 头文件,I/O流类库预定义了一批流对象,连接常用的外部设备.程序员可以定义所需的I/O流对象,
5、使用流库提供的工作方式实现数据传输。流类对象可以建立和删除,可从流中获取数据和向流添加数据。,7.1.3 流对象,istream cin,ostream cout,输入流对象,_内存_,输出流对象,7.2 标准流对象及常用成员函数,标准流对象是在std命名空间中定义的流对象,提供内存与常用外部设备进行数据交互功能。声明在头文件iostream,7.2.1 标准输出流,cout ostream 类的对象(console output)通常连向显示器,可以重定向(关联至文件)在输出流类中重载的一组公用成员函数,实现安全便捷的输出基本数据类型,输出自定义类型对象需要单独重载 ostream&oper
6、ator(基本类型标识符);cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据。,流插入运算符,标准错误流对象cerr(console error)标准错误流对象clog(console log的)作用都是在标准输出设备上显示出错信息,两个对象一般关联显示进行器输出。区别是 cerr不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇endl时输出。,7.2.1 标准输出流,cerr“Zero encountered.“endl;,7.2.1 标准输出流,ostream类的公有成员函数,ostream,7.2.2 标准输入流,cinistream类
7、的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“”从流中提取数据。,7.2.2 标准输入流,cinistream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“”从流中提取数据。在istream流类重载中的一组公用成员函数 istream&operator(基本类型标识符&);流提取符从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符。只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符才能从中提取数据。,istream类的公有成员函数,流插入运算符,可用于输入基本类型数据,也可重载用于输出和输入用户自定义的
8、数据类型,7.2.3 重载流插入和流提取运算符,重载函数形式:ostream 注意:只能将重载“”和“”的函数作为友元函数。,自定义类,class Array public:Array(int size=1);Array();int,例 为数组类重载流插入运算符和提取运算符,Array a(5);cin a;cout a;,6.3.4 重载流插入和流提取运算符,ostream,使用重载版本访问对象 cout a endl;,cout 的别名,istream,返回流类引用,符合原语义cin arr1 arr2;,cin 的别名,istream类的公有成员函数,7.2.4 输入流操作,int is
9、tream:get();/char c=cin.get();istream get.cpp,istream类的公有成员函数,7.2.4 输入流操作,istream其作用是从输入流中读取n-1个字符,赋给指定的字符数组,如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。读取完成后,从流中删除该终止符。Get_getline.cpp,7.2.4 输入流操作,/字符串的输入 char ch120,ch220,ch320,ch420;cinch1;coutch1endl;cin.get(ch2,10);cout
10、ch2endl;cin.get(ch3,20);coutch3endl;cin.get(ch4,20,.);coutch4endl;,istream,istream类的公有成员函数,7.2.4 输入流操作,7.2.5 流错误状态,所有流都把流的状态存储在状态字中不同标志位中存储不同的错误状态位包含在类ios的enum成员中,ios 处理流错误状态的公有成员函数,7.2.4 流错误状态,运行程序,观测结果 grade.cpp streamstate.cpp,ios提供直接设置标志字的控制格式函数 iostream和iomanip库还提供控制符简化I/O格式化操作(自学内容),7.3 格式控制,i
11、os类格式化标志,格式化标志是类定义的枚举集合,用来指定输入输出格式化和操作的不同选择。该枚举类型定义:enum skipws,left,right,internal,dec,oct,hex,showbase,showpoint,uppercase,showpos,scientific,fixed,unitbuf,stdio;引用格式化标志:ios:格式化标志,7.3.1 设置标志字,状态标志 值 含义 输入/输出skipws 0X0001跳过输入中的空白Ileft 0X0002左对齐输出Oright 0X0004右对齐输出Ointernal 0X0008在符号位和基指示符后填入字符Odec
12、0X0010转换基制为十进制I/Ooct 0X0020转换基制为八进制I/Ohex 0X0040转换基制为十六进制I/Oshowbase 0X0080在输出中显示基指示符Oshowpoint 0X0100输出时显示小数点Ouppercase 0X0200十六进制输出时一律用大写字母Oshowpos 0X0400正整数前加“+”号Oscientific 0X0800科学示数法显示浮点数Ofixed 0X1000定点形式显示浮点数Ounitbuf 0X2000输出操作后立即刷新流Ostdio 0X4000输出操作后刷新stdout 和 stdreeO,ios 的标志常量,7.3.1 设置标志字,i
13、os 控制格式的函数,/例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:left);/清除左对齐标志位,置右对齐 cout s endl;,#include void main()int a,b,c;cout a;cout b;cout c;cout Output in decimal:n;cout.setf(io
14、s:dec,ios:basefield);cout a=a b=b c=c endl;cout.setf(ios:hex,ios:basefield);cout Output in hexadecimal:n;cout a=a b=b c=c endl;cout.setf(ios:oct,ios:basefield);cout Output in octal:n;cout a=a b=b c=c endl;,/置八进制输出,/置十六进制输出,/置十进制输出,/置八进制输入,/置十进制输入,/置十六进制输入,例5 不同基数形式的输入输出,#include void main()double x=
15、22.0/7;int i;cout output in fixed:n;cout.setf(ios:fixed|ios:showpos);/定点输出,显示+for(i=1;i=5;i+)cout.precision(i);cout x endl;cout output in scientific:n;/清除原有设置,科学示数法输出 cout.setf(ios:scientific,ios:fixed|ios:showpos);for(i=1;i=5;i+)cout.precision(i);cout x*1e5 endl;,例6 格式化输出浮点数,控制符是istream和ostream类定义了
16、一批函数,作为重载插入运算符的右操作数 控制I/O格式,7.3.2 格式控制符,7.3.2 格式控制符,iostream几个常用的控制符,例7 不同基数形式的输入输出,cin dec a;,cin hex b;,cin oct c;,cout octa=a b=b c=cendl;,cout a=a b=b c=cendl;,cout hexa=a b=b c=cendl;,7.3.2 格式控制符,iomanip的控制符,常用控制符与成员函数,/例8 整数的格式化输出#include#include using namespace std;void main()const int k=618;
17、cout setw(10)setfill(#)setiosflags(ios:right)k endl;cout setw(10)setbase(8)setfill(*)resetiosflags(ios:right)setiosflags(ios:left)k endl;,#include void main()double x=22.0/7;int i;cout output in fixed:n;cout.setf(ios:fixed|ios:showpos);/定点输出,显示+for(i=1;i=5;i+)cout.precision(i);cout x endl;cout outpu
18、t in scientific:n;/清除原有设置,科学示数法输出 cout.setf(ios:scientific,ios:fixed|ios:showpos);for(i=1;i=5;i+)cout.precision(i);cout x*1e5 endl;,例9 格式化输出浮点数,cout setiosflags(ios:fixed|ios:showpos);,cout resetiosflags(ios:fixed|ios:showpos)setiosflags(ios:scientific);,cout setprecision(i)xendl;,coutsetprecision(i
19、)x*1e5endl;,7.4 文件处理,ifstream、ofstream 和 fstream 类 用于内存与文件之间的数据传输,7.4 文件处理,数据的层次结构 Bit Byte Field Record File-DBMS,C+把文件看成有序的字节流,提供低级和高级的IO功能 编码方式:文本文件/二进制文件 存取方式:顺序读写文件/随机读写文件,文件的概念 存储在外部介质中的数据集合称为文件.,-内存-,ifstream fin,fstream finout,ofstream fout,读文件,写文件,读/写文件,10.5.1 文件和流,7.4.1 文件和流,文件流的概念 文件流是以外存
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 输入输出 文件 操作 详解

链接地址:https://www.31ppt.com/p-6154060.html