《输入输出流库》PPT课件.ppt

上传人:xin****828 文档编号:15496625 上传时间:2020-08-13 格式:PPT 页数:23 大小:801KB
收藏 版权申诉 举报 下载
《输入输出流库》PPT课件.ppt_第1页
第1页 / 共23页
《输入输出流库》PPT课件.ppt_第2页
第2页 / 共23页
《输入输出流库》PPT课件.ppt_第3页
第3页 / 共23页
资源描述:

《《输入输出流库》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《输入输出流库》PPT课件.ppt(23页珍藏版)》请在装配图网上搜索。

1、3.5 输入输出流库 3.5.1 概述 3.5.2 流的格式控制和错误处理 3.5.3 使用输入输出成员函数 3.5.4 提取和插入运算符重载 3.5.5 文件流概述 3.5.6 顺序文件操作 3.5.7 随机文件的操作,3.5.1概述 输入输出操作是由“流”来处理的。数据从一个位置到另一个位置的流动抽象为“流”。数据从键盘流入到程序中时,这样的流称为“输入流”,数据从程序中流向屏幕或磁盘文件时,这样的流称为“输出流”。 当流被建立后就可以使用一些特定的操作从流中获取数据可向流中添加数据。从流中获取数据的操作称为“提取”操作,向流中添加数据的操作称为“插入”操作。 C+提供了四个预定义的标准流

2、对象:cin、cout、cerr和clog。当在程序中包含了头文件“iostream.h”,编译器调用相应的构造函数,产生这四个标准流对象,在程序中就可以直接使用它们了。 cin是istream类的对象,用处理标准输入,即键盘输入。cout是ostream类的对象,用处理标准输出,即屏幕输出。cerr和clog都是ostream类的对象,用来处理标准出错信息,并将信息显示在屏幕上。在这四个标准流对象中,除了cerr不支持缓冲外,其余三个都带有缓冲区。 标准流通常用提取运算符“”和插入运算符“”来进行输入输出操作的,而且系统还会自动地完成数据类型的转换。由于前面已讨论过cin和cout的用法,对

3、于cerr和clog也可同样使用,因此这里就不再重复了。,3.5输入输出流库,3.5输入输出流库,3.5.2流的格式控制和错误处理 使用格式控制成员函数 在ios类中控制输入输出的成员函数有: int ios:width();/ 返回当前的宽度设置 int ios:width(int);/ 设置宽度并返回上一次的设置 int ios:precision();/ 返回当前的精度设置 int ios:precision(int);/ 设置精度并返回上一次的设置 char ios:fill();/ 返回当前空位填充的字符 char ios:fill(char);/ 设置空位填充的字符并返回上一次的设

4、置 long ios:setf(long);/ 设置状态标志并返回上一次的状态标志 long ios:unsetf(long);/ 消除状态标志并返回上一次的状态标志 long ios:flags();/ 返回当前的状态标志 long ios:flags(long);/ 设置状态标志并返回上一次的状态标志,3.5输入输出流库,例Ex_FormatFunc 使用格式控制成员函数。 #include using namespace std; void main() int nNum = 12345; double dNum = 12345.6789; char *str = This, is, a

5、 Test!; cout.setf(ios:oct|ios:showbase|ios:showpos); coutnNumtdNumendl; cout.setf(ios:hex|ios:scientific|ios:uppercase); coutnNumtdNumendl; cout.fill(*);/ 设置填充符号为* for (int i=0; i3; i+) cout.width(12); coutstri ; coutendl; cout.setf(ios:left); / 设置标志:左对齐 for (i=0; i3; i+) cout.width(12); coutstri ;

6、coutendl; char a10; cin.getline(a,sizeof(a); ,3.5输入输出流库,运行结果:,使用格式算子 格式算子是一个对象,可以直接被插入符或提取符操作。,3.5输入输出流库,例Ex_Formator 使用格式算子。 #include #include using namespace std; void main() int nNum = 12345; double dNum = 12345.6789; char *str = This, is, a Test!; coutsetiosflags(ios:oct|ios:showbase|ios:showpos

7、); coutnNumtdNumendl; coutsetiosflags(ios:hex|ios:scientific|ios:uppercase); coutnNumtdNumendl; coutsetfill(*);/ 设置填充符号为* for (int i=0; i3; i+) coutsetw(12)stri ; coutendl; coutsetiosflags(ios:left); / 设置标志:左对齐 for (int i=0; i3; i+) coutsetw(12)stri ; coutendl; char a10; cin.getline(a,sizeof(a); ,3.

8、5输入输出流库,运行结果:,流的错误处理 在输入输出过程中,一旦发现操作错误,流就会将发生的错误记录下来。可以使用提供的错误检测功能,检测和查明错误发生的原因和性质,然后调用clear()函数清除错误状态,使流能够恢复处理。 在ios类中,定义了一个公有枚举成员io_state来记录各种错误的性质: enum io_state goodbit= 0 x00,/ 正常 eofbit = 0 x01,/ 已达到文件尾 failbit = 0 x02,/ 操作失败 badbit = 0 x04 / 非法操作 ; 在ios类中又定义了检测上述流状态的下列成员函数: int ios:rdstate();

9、/ 返回当前的流状态 int ios:bad();/ 如果badbit位被置位,返回非0 voidios:clear(int);/ 清除错误状态 int ios:eof();/ 返回非0表示提取操作已到文件尾 int ios:fail();/ 如果failbit位被置位,返回非0 int ios:good();/ 操作正常时,返回非0,3.5输入输出流库,例Ex_ManipError 检测流的错误。 #include using namespace std; void main() int i, s; char buf80; couti; s = cin.rdstate(); couti; s

10、 = cin.rdstate(); char a10; cin.getline(a,sizeof(a); ,3.5输入输出流库,运行结果:,3.5.3使用输入输出成员函数 输入操作的成员函数 (1) 使用get()和getline()函数 用于输入字符或字符串的成员函数get()原型如下: int get(); istream 它是用来从输入流中提取一个输入行,并把提取的字符串由pch返回,nCount和delim的含义同上。 用get()函数提取字符串时,由于遇到换行符就会结束提取,此时换行符仍保留在缓冲区中,当下次提取字符串时就不会正常,而getline()在提取字符串时,换行符也会被提取

11、,但不保存它。因此,当提取一行字符串时,最好能使用函数getline()。,3.5输入输出流库,(2) 使用read()函数 read()函数可以读取字符或字符串,可以读取字节流。原型: istream ,3.5输入输出流库,运行结果:,输出操作的成员函数 ostream类中用于输出单个字符或字节的成员函数是put()和write(),它们的原型如下: ostream,3.5输入输出流库,3.5.4提取和插入运算符重载 C+中的一个最引人注目的特性是允许用户重载“”和“ using namespace std; class CStudent public: friend ostream,3.5

12、输入输出流库,ostream ,3.5输入输出流库,void main() CStudent one; cinone; coutone; char a10; cin.getline(a,sizeof(a); char data80; cin.read(data, 8); ,3.5输入输出流库,运行结果:,3.5.5文件流概述 文件是保存在存储介质上一系列数据的集合。有两种含义,一种指一个外部设备。另一种指一个磁盘文件,存放在磁盘上的文件,每个文件都有一个文件名。 将文件看作是由连续的字符的数据顺序组成的。根据文件中数据的组织方式,可分为文本文件和二进制文件。文本文件中每一个字节用以存放一个字符

13、的ASCII码值,而二进制文件是将数据用二进制形式存放在文件中,它保持了数据在内存中存放的原有格式。 无论是文本文件还是二进制文件,都需要用“文件指针”来操纵。一个文件指针总是和一个文件所关联的,文件打开时,文件指针指向文件的开始,随着对文件的处理,文件指针不断地在文件中移动,并一直指向最新处理的字符(字节)位置。 文件处理有两种方式,一种称为文件的顺序处理,从文件的第一个字符(字节)开始顺序处理到文件的最后一个字符(字节),文件指针也相应地从文件的开始位置到文件的结尾。另一种称为文件的随机处理,在文件中通过C+相关的函数移动文件指针,并指向所要处理的字符(字节)位置。按照这两种处理方式,可将

14、文件相应地称为顺序文件和随机文件。,3.5输入输出流库,C+提供了文件操作的文件流库,如图。ifstream类是从istream类公有派生而来,用来支持从输入文件中提取数据的各种操作。ofstream类是从ostream公有派生而来,用来实现把数据写入到文件中的各种操作。fstream类是从iostream类公有派生而来,提供从文件中提取数据或把数据写入到文件的各种操作。filebuf类从streambuf类派生而来,用来管理磁盘文件的缓冲区,应用程序中一般不涉及该类。,3.5输入输出流库,3.5.6顺序文件操作 文件的打开和关闭 打开或创建一个指定的文件需要下列两个步骤: (1)声明一个if

15、stream、ofstream或fstream类对象。例如: ifstream infile;/ 声明一个输入(读)文件流对象 ofstream outfile;/ 声明一个输出(写)文件流对象 fstream iofile;/ 声明一个可读可写的文件流对象 (2)使用文件流类的成员函数打开或创建一个指定的文件,使得该文件与声明的文件流对象联系起来,这样对流对象的操作也就是对文件的操作。例如: infile.open(“file1.txt”); outfile.open(“file2.txt”); iofile.open(file3.txt,ios:in | ios:out); 上述这两步操作

16、也可合为一步进行,即在声明对象时指定文件名。例如: ifstream infile(“file1.txt”); ofstream outfile(“file2.txt”); fstream iofile(file3.txt,ios:in | ios:out);,3.5输入输出流库,ifstream、ofstream或fstream的函数原型如下: ifstream( const char* szName, int nMode = ios:in, int nProt = filebuf:openprot ); void ifstream:open( const char* szName, int

17、 nMode = ios:in, int nProt = filebuf:openprot ); ofstream( const char* szName, int nMode = ios:out, int nProt = filebuf:openprot ); void ofstream:open( const char* szName, int nMode = ios:out, int nProt = filebuf:openprot ); fstream( const char* szName, int nMode, int nProt = filebuf:openprot ); voi

18、d fstream:;open( const char* szName, int nMode, int nProt = filebuf:openprot ); szName用来指定要打开的文件名,mode指定文件的访问方式。prot用来指定文件的共享方式,默认时是filebuf:openprot,表示DOS兼容的方式。,3.5输入输出流库,3.5输入输出流库,文件的读写 例Ex_File 将文件内容保存在另一文件中,并将内容显示在屏幕上。 #include #include using namespace std; void main() fstream file1;/ 定义一个fstream

19、类的对象用于读 file1.open(Ex_DataFile.txt, ios:in); if (!file1) coutEx_DataFile.txt不能打开!n; return; fstream file2;/ 定义一个fstream类的对象用于写 file2.open(Ex_DataFileBak.txt, ios:out | ios:trunc); if (!file2) coutEx_DataFileBak.txt不能创建!n; file1.close(); return; ,3.5输入输出流库,char ch; while (!file1.eof() file1.read( ,3.

20、5输入输出流库,3.5.7 随机文件操作 提供在文件中来回移动文件指针和非顺序地读写文件的能力,能快速地检索、修改和删除文件中的信息。 顺序文件和随机文件都是以顺序字符流的方式将信息写在磁盘等存储介质上,其区别仅在于文件的访问和更新的方法。以随机的方式访问文件时,文件中的信息在逻辑上组织成定长的记录格式。 定长的记录格式是指文件中的数据被解释成同一种类型的信息的集合。这样就可以通过逻辑的方法,将文件指针直接移动到所读写的数据的起始位置,来读取数据或者将数据直接写到文件的这个位置上。 以随机的方式读写文件时,必须首先打开文件。文件以读(in)或写(out)的模式打开时,文件指针指向文件的第一个字符(字节),而以追加的模式(app)打开后,文件指针指向文件的尾部。 根据具体的读写操作提供seekg和seekp函数将文件指针移动到指定的位置。原型: istream pos指定文件指针的绝对位置。off指定文件指针的相对偏移时,文件指针的最后位置还依靠dir的值。dir值可以是: ios:beg 从文件流的头部开始 ios:cur 从当前的文件指针位置开始 ios:end 从文件流的尾部开始,3.5输入输出流库,

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!