第7讲输入和输出_第1页
第7讲输入和输出_第2页
第7讲输入和输出_第3页
第7讲输入和输出_第4页
第7讲输入和输出_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、面向对象程序设计 第7讲 输出和输出3掌握文件的输入与输出掌握文件的输入与输出。学习目的与要求:学习目的与要求:1了解了解C+系统提供的用于输入输出(系统提供的用于输入输出(I/O)操作)操作的类体系;的类体系;2掌握预定义类型的输入与输出掌握预定义类型的输入与输出无格式输入无格式输入与输出和格式输入与输出;与输出和格式输入与输出;面向对象程序设计 第7讲 输出和输出C+的流库及基本结构的流库及基本结构本讲小结本讲小结文件的输入与输出文件的输入与输出格式化输入与输出格式化输入与输出无格式输入与输出无格式输入与输出面向对象程序设计 第7讲 输出和输出C+的输入和输出的输入和输出 C+除了支持除了

2、支持C语言的输入输出系统外,还有一套自语言的输入输出系统外,还有一套自己的输入输出系统。其原因是在己的输入输出系统。其原因是在C+中用户需要定义众多中用户需要定义众多的自定义类型,而的自定义类型,而C语言的输入输出系统不支持用户自定语言的输入输出系统不支持用户自定义的类型。义的类型。例:例:class my_Class int i; float f; char ch;obj;在在C语言中不支持:语言中不支持:printf(“%my_Classn”,obj);面向对象程序设计 第7讲 输出和输出C+的流类比的流类比C的输入输出函数具有更大的优越性。的输入输出函数具有更大的优越性。一、它是类型安全

3、的,可以防止用户输入输出数据与类一、它是类型安全的,可以防止用户输入输出数据与类型不一致的错误。型不一致的错误。二、二、C+可以重载运算符可以重载运算符“”和和“”,使之能识别,使之能识别用户自定义的类型,并方便地输出。用户自定义的类型,并方便地输出。例:例:int i=3; float f=4.5; 则:则:printf(“%dn”,i ); printf(“%dn”,f ); printf(“%dn”, “char” );会得到什么样的结果?会得到什么样的结果?而使用而使用“”会自动识别各变量的类型,并输出正会自动识别各变量的类型,并输出正确的结果。确的结果。面向对象程序设计 第7讲 输出

4、和输出 C+借用流表示一种数据传递操作,流类是为输入输借用流表示一种数据传递操作,流类是为输入输出提供的一组类,它们都放在流类库中。流总是与某一设出提供的一组类,它们都放在流类库中。流总是与某一设备相联系。流具有方向性,主要有:备相联系。流具有方向性,主要有:输入流输入流、输出流输出流和和输输入输出流入输出流C+的流类库的流类库C+中包含几个预定义的流对象,它们是:中包含几个预定义的流对象,它们是:cin:标准输入流(对象):标准输入流(对象)cout:标准输出流(对象):标准输出流(对象)cerr:非缓冲型的标准出错流(对象):非缓冲型的标准出错流(对象)clog:缓冲型的标准出错流(对象)

5、:缓冲型的标准出错流(对象) 对流对象进行抽象就得到流类,流类形成的层次结构对流对象进行抽象就得到流类,流类形成的层次结构就构成了流类库。就构成了流类库。面向对象程序设计 第7讲 输出和输出 C+流类库是用继承方法建立起来的一个输入输出类流类库是用继承方法建立起来的一个输入输出类库,它具有两个平行的基类:库,它具有两个平行的基类:streambuf类和类和ios类。所有类。所有其它的流类都是从它们直接或间接地派生出来的。其它的流类都是从它们直接或间接地派生出来的。ios类:输入输出操作在用户一方的接口类:输入输出操作在用户一方的接口streambuf类:输入输出操作在物理设备一方的接口类:输入

6、输出操作在物理设备一方的接口即:即:ios类负责高层操作,类负责高层操作,streambuf类负责底层操作。类负责底层操作。面向对象程序设计 第7讲 输出和输出C+的流类库的流类库streambuf类类 streambuf类是一个抽象类,实际应该称缓冲区类,类是一个抽象类,实际应该称缓冲区类,它为它为ios提供低级支持,其层次结构如下图所示:提供低级支持,其层次结构如下图所示:Ffilebuf类使用文件来保存缓冲区中的字符序列类使用文件来保存缓冲区中的字符序列Fstrstreambuf类扩展了类扩展了streambuf类的功能,提供了在内存中进行提类的功能,提供了在内存中进行提取和插入操作的缓

7、冲区管理。取和插入操作的缓冲区管理。Fconbuf类扩展了类扩展了streambuf类的功能,用于处理输出,提供了控制光类的功能,用于处理输出,提供了控制光标、设置颜色、清屏等功能,为输入输出操作提供缓冲区管理。标、设置颜色、清屏等功能,为输入输出操作提供缓冲区管理。面向对象程序设计 第7讲 输出和输出C+的流类库的流类库ios类类 ios作为流类库中的一个基类,可以派生出许多类,其作为流类库中的一个基类,可以派生出许多类,其层次结构如下图所示:层次结构如下图所示:面向对象程序设计 第7讲 输出和输出 iostream类库中不同的类的声明被放在不同的头文件中,类库中不同的类的声明被放在不同的头

8、文件中,用户在自己的程序中用用户在自己的程序中用#include命令包含了有关的头文件,命令包含了有关的头文件,就相当于在本程序中声明了所需要用到的类。即头文件是就相当于在本程序中声明了所需要用到的类。即头文件是程序与类库的接口。程序与类库的接口。iostream类库的接口分别由不同的头文类库的接口分别由不同的头文件来实现。常用的有:件来实现。常用的有:iostream:包含对输入输出进行操作所需的信息:包含对输入输出进行操作所需的信息fstream:用于用户对管理的文件的:用于用户对管理的文件的I/O操作操作strstream:用于字符串流的:用于字符串流的I/O操作操作stdiostrea

9、m:用于混合使用:用于混合使用C和和C+的的I/O机制机制iomanip:使用格式化:使用格式化I/O时应包含此头文件时应包含此头文件面向对象程序设计 第7讲 输出和输出无格式输入与输出无格式输入与输出C+的流库及基本结构的流库及基本结构本讲小结本讲小结文件的输入与输出文件的输入与输出格式化输入与输出格式化输入与输出面向对象程序设计 第7讲 输出和输出无格式输入与输出无格式输入与输出 预定义类型的输入与输出是指预定义类型数据对于预定义类型的输入与输出是指预定义类型数据对于标准输入输出设备的输入与输出,它是其它输入输出的标准输入输出设备的输入与输出,它是其它输入输出的基础。分为基础。分为无格式输

10、入与输出无格式输入与输出和和格式化输入与输出格式化输入与输出。面向对象程序设计 第7讲 输出和输出无格式输入与输出无格式输入与输出输出运算符输出运算符 从运算符的角度来看,输出通过输出运算符从运算符的角度来看,输出通过输出运算符“”来完成。来完成。“”也称作也称作插入运算符插入运算符,它是一个双目运算,它是一个双目运算符,左操作数为符,左操作数为ostream的一个对象(如的一个对象(如cout),右操),右操作数为系统预定义类型的一个常量或变量。作数为系统预定义类型的一个常量或变量。其一般格式为:其一般格式为:cout常量或变量常量或变量;解释为:解释为: cout.operator(常量或

11、变量常量或变量);例:例:cout“This is a string.”endl;功能:将字符串功能:将字符串“This is a string.”写到流对象写到流对象cout。面向对象程序设计 第7讲 输出和输出说明:说明:F输出运算符输出运算符“”采用左结合方式工作,并且返回它的采用左结合方式工作,并且返回它的右操作数,因此可以把多个输出组合到一个语句中工作。右操作数,因此可以把多个输出组合到一个语句中工作。F使用输出运算符使用输出运算符“”进行输出操作时,可以将不同类型进行输出操作时,可以将不同类型的变量组合在一条语句中。编译器会根据运算符右边的操作的变量组合在一条语句中。编译器会根据运

12、算符右边的操作数的类型来决定调用哪个函数的重载。数的类型来决定调用哪个函数的重载。例:例:int i=3;double f=4.5;cout“i=”i“,f=”f”来完成。来完成。“”也称作也称作提取运算符提取运算符,它也是一个双目运,它也是一个双目运算符,左操作数为算符,左操作数为istream的一个对象(的一个对象(cin),右操作),右操作数为系统预定义类型的变量。数为系统预定义类型的变量。其一般格式为:其一般格式为:cin变量变量;解释为:解释为: cin.operator(变量变量);例:例: int x; cinx;功能:将用户通过键盘读入的整数,存入变量功能:将用户通过键盘读入的

13、整数,存入变量x中。中。面向对象程序设计 第7讲 输出和输出说明:说明:F在缺省情况下,运算符在缺省情况下,运算符“”将跳过空白符,然后读入将跳过空白符,然后读入后面的与变量类型相对应的值。因此,给一组变量输入值后面的与变量类型相对应的值。因此,给一组变量输入值时,可用空格或换行将输入的数值隔开。时,可用空格或换行将输入的数值隔开。F当输入字符串时,运算符当输入字符串时,运算符“”的作用是跳过空白符,读的作用是跳过空白符,读入后面的非空白字符,直到遇到另一个空白字符为止,并在入后面的非空白字符,直到遇到另一个空白字符为止,并在串尾加结束标志串尾加结束标志0。例:例:char *str;cins

14、tr;若键入若键入This is a string.时,得到的结果是时,得到的结果是This。面向对象程序设计 第7讲 输出和输出F输入数据时,系统除检查是否有空白符外,还检查输入输入数据时,系统除检查是否有空白符外,还检查输入数据是否与变量类型匹配。数据是否与变量类型匹配。例:例:int i;float f;string p;cinif;若键入若键入56.78 32.5时,得到的结果是时,得到的结果是i的值是的值是56,f的值是的值是0.78。cinip;若键入若键入20 year或或20year,其结果都正确。,其结果都正确。面向对象程序设计 第7讲 输出和输出无格式输入与输出无格式输入与

15、输出C+的流库及基本结构的流库及基本结构本讲小结本讲小结文件的输入与输出文件的输入与输出格式化输入与输出格式化输入与输出面向对象程序设计 第7讲 输出和输出格式化输入与输出格式化输入与输出 很多情况下,对计算机的输入和输出格式需进行控很多情况下,对计算机的输入和输出格式需进行控制。制。C+提供了两种进行格式控制的方法:一是使用提供了两种进行格式控制的方法:一是使用ios类中有关格式控制的成员函数进行格式控制;另一种是类中有关格式控制的成员函数进行格式控制;另一种是使用预定义的操作符进行格式控制。使用预定义的操作符进行格式控制。面向对象程序设计 第7讲 输出和输出格式化输入与输出格式化输入与输出

16、使用使用ios类的成员函数类的成员函数 ios类中有几个成员函数可以用来对输入输类中有几个成员函数可以用来对输入输出进行格式控制。格式控制主要是通过对格式出进行格式控制。格式控制主要是通过对格式标志位的操作来完成。格式标志位在标志位的操作来完成。格式标志位在ios类中被类中被定义为枚举值。因此,引用这些格式标志时要定义为枚举值。因此,引用这些格式标志时要在前面加上类名在前面加上类名ios和域运算符和域运算符:。面向对象程序设计 第7讲 输出和输出控制输出格式的成员函数控制输出格式的成员函数 成员函数成员函数 功功 能能setf(long flags)unsetf(long flags)flag

17、()flags(long flags)width()width(int w)precision(int p)fill()fill(char ch)设置状态标志位设置状态标志位flags清除状态标志,并返回前状态标志清除状态标志,并返回前状态标志测试状态标志测试状态标志设置状态标志,并返回前状态标志设置状态标志,并返回前状态标志返回当前的宽度设置值返回当前的宽度设置值设置域宽设置域宽w,返回以前的设置,返回以前的设置设置小数位数设置小数位数p,返回以前的小数位数,返回以前的小数位数返回当前的填充字符返回当前的填充字符设置填充字符设置填充字符ch,返回当前的填充字符,返回当前的填充字符面向对象程序

18、设计 第7讲 输出和输出 格式状态格式状态 功功 能能ios:skipwsios:leftios:rightios:internalios:decios:octios:hexios:showbaseios:showpointios:showposios:upercace设置格式状态的格式标志设置格式状态的格式标志跳过输入中的空白跳过输入中的空白左对齐输出左对齐输出右对齐输出右对齐输出值的符号位左对齐,值右对齐,中间填充字符值的符号位左对齐,值右对齐,中间填充字符设置整数的基数为十进制设置整数的基数为十进制设置整数的基数为八进制设置整数的基数为八进制设置整数的基数为十六进制设置整数的基数为十六进

19、制强制输出整数的基数强制输出整数的基数强制输出小数点强制输出小数点对正数显式对正数显式“+”号号科学记数法和十六进制的字符用大写字母科学记数法和十六进制的字符用大写字母面向对象程序设计 第7讲 输出和输出设置格式状态的格式标志设置格式状态的格式标志 格式状态格式状态 功功 能能ios:scientificios:fixedios:unitbufios:stdio浮点数用科学记数法格式输出浮点数用科学记数法格式输出浮点数用小数形式输出浮点数用小数形式输出每次输出后刷新所有的流每次输出后刷新所有的流每次输出后刷新每次输出后刷新stdout和和stderr面向对象程序设计 第7讲 输出和输出例例7.

20、1 用成员函数进行格式控制。用成员函数进行格式控制。#include using namespace std;void main() int x=21; float f=123.45678; char *ps=China; coutx=xendl; coutx_width=cout.width()endl; coutx_fill=cout.fill()endl; coutx_precision=cout.precision()endl; coutx fendl; cout-endl; cout.setf(ios:showbase); /设置输出时的基数符号设置输出时的基数符号 coutdec:

21、xendl; /默认以十进制形式输出默认以十进制形式输出x cout.unsetf(ios:dec); /终止十进制的格式设置终止十进制的格式设置面向对象程序设计 第7讲 输出和输出 cout.setf(ios:hex); /设置以十六进制输出的状态设置以十六进制输出的状态 couthex:xendl; /以十六进制形式输出以十六进制形式输出x cout.unsetf(ios:hex); cout.setf(ios:oct); /设置以八进制输出的状态设置以八进制输出的状态 coutoct:xendl; /以八进制形式输出以八进制形式输出x cout.unsetf(ios:oct); /终止八

22、进制的格式设置终止八进制的格式设置 cout-endl; cout.width(10); /指定域宽为指定域宽为10 coutpsendl; /输出字符串输出字符串 cout.width(10); cout.fill(#); /指定空白处用指定空白处用#填充填充 coutpsendl; cout.width(10); cout.fill($); /指定空白处用指定空白处用#填充填充 cout.setf(ios:left); /使字符串左对齐,空白处用使字符串左对齐,空白处用$填充填充 coutpsendl; cout-endl;面向对象程序设计 第7讲 输出和输出 cout.setf(ios:

23、scientific); /指定用科学记数法输出指定用科学记数法输出 coutf=; cout.width(14); coutfendl; cout.unsetf(ios:scientific); /终止科学记数法状态终止科学记数法状态 cout.setf(ios:fixed); /指定用小数形式输出指定用小数形式输出 cout.width(12); cout.setf(ios:showpos); /在输出时正数显示在输出时正数显示“+”号号 cout.setf(ios:internal); /数符出现在左边数符出现在左边 cout.precision(4); /保留保留4位小数位小数 cou

24、tfendl;面向对象程序设计 第7讲 输出和输出说明:说明:F设置状态标志,即将某一状态标志位置为设置状态标志,即将某一状态标志位置为“1”,可使用,可使用函数函数setf()。其一般格式为:流对象。其一般格式为:流对象.setf(ios:状态标志状态标志); 例如:例如:cout.setf(ios:left); /设置输出左对齐设置输出左对齐F清除某一状态标志,即将某一状态标志位置为清除某一状态标志,即将某一状态标志位置为“0”,可使用,可使用函数函数unsetf()。其一般格式为:流对象。其一般格式为:流对象.unsetf(ios:状态标志状态标志);F取一个状态标志,可使用函数取一个状

25、态标志,可使用函数flags()。该函数有不带参。该函数有不带参flags()和带参和带参flags(flag) 两种形式。前者用于返回当前的状两种形式。前者用于返回当前的状态字;后者将状态字设置为态字;后者将状态字设置为flag。面向对象程序设计 第7讲 输出和输出例例7.2 取状态标志函数的使用取状态标志函数的使用#include void showflags(long f) /输出状态标志字函数输出状态标志字函数 long i; for(i=0 x8000;i;i=i1) if( i&f ) cout1; else cout0; coutendl;void main() long f;

26、f=cout.flags(); showflags(f); cout.setf(ios:showpos|ios:scientific); /追加状态标志位追加状态标志位 f=cout.flags(); showflags(f); cout.unsetf(ios:scientific); f=cout.flags(); showflags(f);面向对象程序设计 第7讲 输出和输出F域宽主要用来控制输出,设置域宽的成员函数有两个:域宽主要用来控制输出,设置域宽的成员函数有两个:不带参的和带参的不带参的和带参的width()函数。前者用来返回当前的域宽函数。前者用来返回当前的域宽值,后者用来设置域

27、宽,并返回原来的域宽。值,后者用来设置域宽,并返回原来的域宽。注意注意:所设置的域宽仅对下一个流输出操作有效,当一次:所设置的域宽仅对下一个流输出操作有效,当一次输出操作完成后,域宽又恢复为输出操作完成后,域宽又恢复为0。F填空字符函数填空字符函数fill()必须与必须与width()函数配合使用,表示当函数配合使用,表示当输出值不满域宽时用填充字符来填充。其函数有两个:不带输出值不满域宽时用填充字符来填充。其函数有两个:不带参的和带参的参的和带参的fill()函数。函数。面向对象程序设计 第7讲 输出和输出格式化输入与输出格式化输入与输出使用预定义的操作符使用预定义的操作符 使用使用ios类

28、中的成员函数进行类中的成员函数进行I/O格式控制时,每个格式控制时,每个函数的调用需要些一条语句,而且不能将它们直接嵌入函数的调用需要些一条语句,而且不能将它们直接嵌入到到I/O语句中去,使用起来不方便。因此,语句中去,使用起来不方便。因此,C+又提供又提供了一种称作操作符的特殊函数进行了一种称作操作符的特殊函数进行I/O格式控制。格式控制。 所有不带参的操作符都定义在头文件所有不带参的操作符都定义在头文件iostream.h中,中,而带参的操作符则定义在头文件而带参的操作符则定义在头文件iomanip.h文件中。文件中。面向对象程序设计 第7讲 输出和输出 操作符操作符 功功 能能常用的预定

29、义操作符常用的预定义操作符dechexoctwsendlendsflushsetbase(int n)resetiosflags(long f)setiosflags(long f)setfill(char ch)setprecision(int n)setw(int n)以十进制形式输入输出整数以十进制形式输入输出整数以十六进制形式输入输出整数以十六进制形式输入输出整数以八进制形式输入输出整数以八进制形式输入输出整数输入时跳过前导空白符输入时跳过前导空白符插入一个换行符并刷新输出流插入一个换行符并刷新输出流插入一个空字符插入一个空字符0,用来结束字符串,用来结束字符串刷新一个输出流刷新一个输

30、出流设置转换基格式为设置转换基格式为n(n的值为的值为0,8,10,16)关闭由参数关闭由参数f指定的格式标志指定的格式标志设置由参数设置由参数f指定的格式标志指定的格式标志设置设置ch为填充字符,缺省时为空格为填充字符,缺省时为空格设置小数部分的位数设置小数部分的位数设置域宽为设置域宽为n面向对象程序设计 第7讲 输出和输出 格式标志名格式标志名 含含 义义setiosflags()和和resetiosflags()所用的格式标志所用的格式标志ios:leftios:rightios:scientificios:fixedios:decios:hexios:octios:uppercasei

31、os:showbaseios:showposios:showpoint输出数据按域宽左对齐输出输出数据按域宽左对齐输出输出数据按域宽右对齐输出输出数据按域宽右对齐输出使用科学记数法表示浮点数使用科学记数法表示浮点数使用定点形式表示浮点数使用定点形式表示浮点数转换基数为十进制形式转换基数为十进制形式转换基数为十六进制形式转换基数为十六进制形式转换基数为八进制形式转换基数为八进制形式十六进制和科学记数法输出时,用大写字母十六进制和科学记数法输出时,用大写字母输出带有一个表示制式的字符(输出带有一个表示制式的字符(o表示八进制)表示八进制)在正数前添加一个在正数前添加一个“+”号号浮点输出时必须带有

32、一个小数点浮点输出时必须带有一个小数点面向对象程序设计 第7讲 输出和输出例例7.3 操作符的使用操作符的使用#include #include using namespace std;void main() int x=21; double f=123.456789,f1=5; char *ps=China; coutdec: decxend; couthex: hexxendl; coutoct: octxendl; couthex: setbase(16)xendl; coutsetw(10)setfill($)setbase(10)xendl; coutsetiosflags(ios:

33、showbase)setbase(8)xendl;面向对象程序设计 第7讲 输出和输出 coutf=fsetiosflags(ios:showpoint), f1=f1endl; coutf=setprecision(8)setiosflags(ios:showpos)fendl; coutf=setiosflags(ios:scientific)fendl; coutps=psendl; coutsetiosflags(ios:left)setw(15)psendl; coutresetiosflags(ios:left)setw(15)setfill( )psendl;说明说明F操作符操作

34、符setw只对最靠近它的输出起作用。只对最靠近它的输出起作用。F使用使用dec、oct、hex操作符后,其作用一直保持,直到重新设置为止。操作符后,其作用一直保持,直到重新设置为止。F用操作符用操作符setprecision设置小数位数后,输出时作四舍五入处理。设置小数位数后,输出时作四舍五入处理。面向对象程序设计 第7讲 输出和输出无格式输入与输出无格式输入与输出C+的流库及基本结构的流库及基本结构本讲小结本讲小结文件的输入与输出文件的输入与输出格式化输入与输出格式化输入与输出面向对象程序设计 第7讲 输出和输出文件的输入与输出文件的输入与输出 根据数据的组织形式,文件分为文本文件和二进根据

35、数据的组织形式,文件分为文本文件和二进制文件。制文件。 C+文件是一个字符流或二进制流,它把数文件是一个字符流或二进制流,它把数据看作是一连串的字符,而不考虑记录的界限,它对据看作是一连串的字符,而不考虑记录的界限,它对文件的存取以文件的存取以字符字符为单位进行。我们把这种文件称为为单位进行。我们把这种文件称为流式文件流式文件。 在在C+中,要进行文件的输入输出,必须首先创中,要进行文件的输入输出,必须首先创建一个流,然后将这个流与文件相关联,即打开文件,建一个流,然后将这个流与文件相关联,即打开文件,才能进行输入输出操作,操作完成后关闭文件。才能进行输入输出操作,操作完成后关闭文件。面向对象

36、程序设计 第7讲 输出和输出文件的输入与输出文件的输入与输出文件的打开与关闭文件的打开与关闭 在在C+中,打开一个文件,就是将这个文件与一中,打开一个文件,就是将这个文件与一个流建立关联;关闭一个文件,就是取消这种关联。个流建立关联;关闭一个文件,就是取消这种关联。 C+有三种类型的文件流:有三种类型的文件流:ifstream:输入文件流:输入文件流ofstream:输出文件流:输出文件流fstream: 输入输出文件流输入输出文件流面向对象程序设计 第7讲 输出和输出打开文件:打开文件: 使用使用open()函数打开文件,就是使某一文件与上面函数打开文件,就是使某一文件与上面的某一流相联系。

37、的某一流相联系。open()函数是上面三个流类的成员函函数是上面三个流类的成员函数,其原型是在数,其原型是在fstream.h中定义的,原型为:中定义的,原型为:void open(const unsigned char*, int mode, int access=filebuf:openprot);其中:其中:第一个参数:用来传递文件名,文件名可包含路径,若第一个参数:用来传递文件名,文件名可包含路径,若缺省路径,则默认为当前目录下的文件。缺省路径,则默认为当前目录下的文件。第二个参数:决定打开文件的方式,它必须取下面值中第二个参数:决定打开文件的方式,它必须取下面值中的一个或多个。的一个

38、或多个。面向对象程序设计 第7讲 输出和输出 方式方式 作作 用用文件输入输出方式设置值文件输入输出方式设置值ios:inios:outios:appios:ateios:truncios:binaryios:nocreateios:noreplace以输入方式打开文件以输入方式打开文件以输出方式打开文件,若文件存在,则删除其原来的内容以输出方式打开文件,若文件存在,则删除其原来的内容以输出方式打开文件,写入的数据添加在文件末尾以输出方式打开文件,写入的数据添加在文件末尾打开一个文件,若文件已存在,则删除其中全部数打开一个文件,若文件已存在,则删除其中全部数据;若不存在,则建立新文件据;若不存

39、在,则建立新文件打开一个已有的文件,文件指针指向文件末尾打开一个已有的文件,文件指针指向文件末尾以二进制方式打开一个文件,若不指定则打开以二进制方式打开一个文件,若不指定则打开ASCII文件文件打开一个已有文件,若文件不存在则打开失败打开一个已有文件,若文件不存在则打开失败打开一个文件,若文件不存在在建立新文件,如文件存在打开一个文件,若文件不存在在建立新文件,如文件存在则操作失败则操作失败面向对象程序设计 第7讲 输出和输出第三个参数:决定文件的访问方式。第三个参数:决定文件的访问方式。 0:普通文件:普通文件 1:只读文件:只读文件 2:隐含文件:隐含文件 4:系统文件:系统文件 8:备份

40、文件:备份文件说明说明F参数参数mode和和access都有缺省值,都有缺省值,mode的缺省值:对于类的缺省值:对于类ifstream的缺的缺省值是省值是ios:in;对于类;对于类ofstream的缺省值是的缺省值是ios:out, access的缺省值是的缺省值是0。F打开文件示例:打开文件示例:ofstream outfile; outfile.open(“test”,ios:out,0); 或:或: outfile.open(“test”);F可以用可以用“位或位或”运算符运算符“|”对输入输出方式组合对输入输出方式组合 例如:例如:outfile(“test”, ios:out|i

41、os:binary); /打开一个二进制文件,可读可写打开一个二进制文件,可读可写F文件打开操作失败,函数的返回值是文件打开操作失败,函数的返回值是0(假)。(假)。面向对象程序设计 第7讲 输出和输出关闭文件:关闭文件: 对已打开的文件读写操作完成后,应关闭文件。对已打开的文件读写操作完成后,应关闭文件。也就是使打开的文件与流解除关联。关闭文件用成员也就是使打开的文件与流解除关联。关闭文件用成员函数函数close。例:。例:outfile.close();面向对象程序设计 第7讲 输出和输出文件的输入与输出文件的输入与输出文件的读写文件的读写 当以某种方式打开文件后,即可对打开当以某种方式打

42、开文件后,即可对打开的文件进行读写操作。文件的读写有两种方的文件进行读写操作。文件的读写有两种方式:式:文本文件文本文件的读写操作和的读写操作和二进制文件二进制文件的读的读写操作。写操作。面向对象程序设计 第7讲 输出和输出文本文件的读写:文本文件的读写:例例7.4 通过键盘输入通过键盘输入10个整数,写入到文本文件个整数,写入到文本文件test中,然后从该文中,然后从该文件中读出所有数据,进行排序,将排序结果写到件中读出所有数据,进行排序,将排序结果写到sorttest文件中。文件中。#include #include using namespace std;void main() int

43、a10,i; ofstream ofile; ifstream ifile; ofile.open(d:test.dat,ios:out); cout输入输入10个整数个整数: endl; for(i=0;iai; ofileai ; ofile.close();面向对象程序设计 第7讲 输出和输出 ifile.open(d:test.dat,ios:in); for(i=0;iai; ifile.close(); Sort (a,10); ofile.open(d:sorttest.dat,ios:out); for(i=0;i10;i+) ofileai ; ofile.close();注

44、意注意:在向磁盘文件输出一个数据后,要输出一个(或几:在向磁盘文件输出一个数据后,要输出一个(或几个)空格或换行符,以作为数据间的分隔,否在以后从磁个)空格或换行符,以作为数据间的分隔,否在以后从磁盘文件读数据时,整数的数字连成一片无法区分。盘文件读数据时,整数的数字连成一片无法区分。面向对象程序设计 第7讲 输出和输出二进制文件的读写:二进制文件的读写: 文本文件是字符流,而二进制文件是字节流。文本文件是字符流,而二进制文件是字节流。对二进制文件的读写主要用对二进制文件的读写主要用istream类的成员函数类的成员函数read和和ostream类的类的write函数来实现。这两个成员函数来实

45、现。这两个成员函数的原型为:函数的原型为: istream& read( char *buffer, int len); ostream& write(const char *buffer, int len);其中:字符指针其中:字符指针buffer表示指向内存中一段存储空表示指向内存中一段存储空间。注意:由于间。注意:由于buffer的类型是的类型是char*型,当输入输型,当输入输出其它类型的数据时,必须进行类型转换。出其它类型的数据时,必须进行类型转换。len是读写的字节数是读写的字节数面向对象程序设计 第7讲 输出和输出例例7.5 通过键盘输入通过键盘输入10个学生的基本信息,写入到二进制文个学生

温馨提示

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

最新文档

评论

0/150

提交评论