C程序设计输入输出流.pptx

上传人:一*** 文档编号:71820055 上传时间:2023-02-06 格式:PPTX 页数:54 大小:350.20KB
返回 下载 相关 举报
C程序设计输入输出流.pptx_第1页
第1页 / 共54页
C程序设计输入输出流.pptx_第2页
第2页 / 共54页
点击查看更多>>
资源描述

《C程序设计输入输出流.pptx》由会员分享,可在线阅读,更多相关《C程序设计输入输出流.pptx(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、会计学1C程序设计程序设计(chn x sh j)输入输出流输入输出流第一页,共54页。2023/2/62第第4章章 输入输入(shr)/输出流输出流n n本章学习重点掌握内容:本章学习重点掌握内容:n n输入输出流基本知识输入输出流基本知识n n输入输出流类体系结构输入输出流类体系结构n nI/OI/O流操作的格式控制流操作的格式控制n n文件的输入输出文件的输入输出n n字符串流的使用字符串流的使用n n重载重载(zhn(zhn z z i)i)插入和提取运算符插入和提取运算符第1页/共54页第二页,共54页。2023/2/63第第4章章 输入输入(shr)输出流输出流 n n4.1 4.

2、1 输入输出流基本概念输入输出流基本概念n n4.2 4.2 输入输出流类体系输入输出流类体系n n4.3 I/O4.3 I/O流操作流操作n n4.4 4.4 件流和文件件流和文件(wnjin)(wnjin)的输入输出的输入输出n n4.5 4.5 字符串流字符串流n n4.6 4.6 重载插入和提取运算符重载插入和提取运算符n n4.7 4.7 综合应用实例综合应用实例第2页/共54页第三页,共54页。2023/2/644.1 输入输入(shr)输出流基本概输出流基本概念念1 1、流、流 流是一种抽象,它负责在数据的生产者(程序流是一种抽象,它负责在数据的生产者(程序/文件)和数据的消费者

3、(文件文件)和数据的消费者(文件/程序)之程序)之间建立联系,并管理数据的流动。间建立联系,并管理数据的流动。程序建立一个流对象,并指定这个程序建立一个流对象,并指定这个(zh ge)(zh ge)流对象与某个文件对象建立连接,程序操作流流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。对象,流对象通过文件系统对所连接的文件对象产生作用。一般意义下的读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插一般意义下的读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。入。第3页/共54页第四页,共54页。2023/2/654

4、.1 输入输入(shr)输出流基本概输出流基本概念念 2 2、字节流、字节流 字节流分为字符流(也称文本流)和二进制流。字节流分为字符流(也称文本流)和二进制流。字符流将字节流的每个字节按字符流将字节流的每个字节按ASCASC字符解释,缺字符解释,缺点:传输时需作转换,效率较低。如源程序文件和文本点:传输时需作转换,效率较低。如源程序文件和文本文件。优点:文件。优点:ASCASC字符是标准的,字符流可以直接编字符是标准的,字符流可以直接编辑辑(binj)(binj)、显示或打印,生的文件通行于各类计算机。、显示或打印,生的文件通行于各类计算机。二进制流将字节流的每个字节以二进制方式解释,二进制

5、流将字节流的每个字节以二进制方式解释,优点:传输时不作任何转换,故效率高。缺点:各类计优点:传输时不作任何转换,故效率高。缺点:各类计算机对数据的二进制存放格式各有差异,且无法人工阅算机对数据的二进制存放格式各有差异,且无法人工阅读,故二进制流产生的文件可移植性较差。读,故二进制流产生的文件可移植性较差。第4页/共54页第五页,共54页。2023/2/664.1 输入输入(shr)输出流基本概输出流基本概念念 3 3、文件、文件(wnjin)(wnjin)文件文件(wnjin)(wnjin)一般是指存储在外部介质上数据的集合。一般是指存储在外部介质上数据的集合。计算机中的程序、数据、文档通常都

6、组织成文件计算机中的程序、数据、文档通常都组织成文件(wnjin)(wnjin)存放在外存储器中。由于输入输出设备具有字节流特征,存放在外存储器中。由于输入输出设备具有字节流特征,所以操作系统也把它们看作是文件所以操作系统也把它们看作是文件(wnjin)(wnjin)。为了便于区别,每个文件为了便于区别,每个文件(wnjin)(wnjin)都有自己的名字(称都有自己的名字(称为文件为文件(wnjin)(wnjin)名),程序可通过文件名),程序可通过文件(wnjin)(wnjin)名来使用名来使用文件文件(wnjin)(wnjin)。不同的计算机系统中文件不同的计算机系统中文件(wnjin)(

7、wnjin)名的组成规则有所不名的组成规则有所不同。同。第5页/共54页第六页,共54页。2023/2/674.1 输入输入(shr)输出流基本概输出流基本概念念4 4、缓冲、缓冲系统在主存中开辟系统在主存中开辟(kip)(kip)的、用来临时存放输入输出的、用来临时存放输入输出数据的区域,成为输入输出缓冲区(简称缓冲区)。数据的区域,成为输入输出缓冲区(简称缓冲区)。输入输出流有缓冲和非缓冲之分。对于非缓冲流,一输入输出流有缓冲和非缓冲之分。对于非缓冲流,一旦数据送入缓冲区,就立即处理;对于缓冲流,仅当旦数据送入缓冲区,就立即处理;对于缓冲流,仅当缓冲区满或当前送入的数据为新的一行字符时,系

8、统缓冲区满或当前送入的数据为新的一行字符时,系统才对流中的数据进行处理(称为刷新)。通常使用的才对流中的数据进行处理(称为刷新)。通常使用的是缓冲流,仅在特殊场合,才使用非缓冲流。是缓冲流,仅在特殊场合,才使用非缓冲流。第6页/共54页第七页,共54页。2023/2/684.1 输入输入(shr)输出流基本概输出流基本概念念5 5、命名空间、命名空间命名空间,就是在程序的不同的模块命名空间,就是在程序的不同的模块(m kui)(m kui)中使用相中使用相同的名字表示不同的事物(实体)。目的是提供一种机同的名字表示不同的事物(实体)。目的是提供一种机制,使大程序的各个部分中因出现重名而导致冲突

9、的可制,使大程序的各个部分中因出现重名而导致冲突的可能性降到最低。能性降到最低。作用是为了解决同一工程中命名冲突的问题。作用是为了解决同一工程中命名冲突的问题。在命名空间内部,可以使用其成员的名字。在命名空间在命名空间内部,可以使用其成员的名字。在命名空间的外部,就只能把某个实体的名字和命名空间的名称组的外部,就只能把某个实体的名字和命名空间的名称组合起来,表示该命名空间中的实体。合起来,表示该命名空间中的实体。一个程序中可以包含几个不同的命名空间。一个程序中可以包含几个不同的命名空间。第7页/共54页第八页,共54页。2023/2/694.2 输入输入(shr)输出流类体系输出流类体系4.2

10、.1 4.2.1 流类库流类库C+C+为实现数据为实现数据(shj)(shj)的输入和输出定义了一个庞大的流类库,它包括的类主的输入和输出定义了一个庞大的流类库,它包括的类主要有要有iosios,istreamistream,ostreamostream,iostreamiostream,ifstreamifstream,ofstreamofstream,fstreamfstream等。这些类中等。这些类中存在着继承关系。如图:存在着继承关系。如图:第8页/共54页第九页,共54页。2023/2/6104.2 输入输入(shr)输出流类体系输出流类体系 C+C+对文件的输入输出需要用到对文件的

11、输入输出需要用到ifstreamifstream和和ofstreamofstream类。类。实际编程时,通常用类实际编程时,通常用类iosios、istreamistream、ostreamostream、iostream iostream、fstreamfstream提供的公有接口提供的公有接口(ji k(ji k u)u)成员函数来进行输入输出。成员函数来进行输入输出。常见类图如表常见类图如表4-1.4-1.第9页/共54页第十页,共54页。2023/2/6114.2 输入输入(shr)输出流类体系输出流类体系n n4.2.2 4.2.2 标准流对象标准流对象n nC+C+语言在头文件语言

12、在头文件 iostream.h iostream.h 中预定义了中预定义了 4 4个标准流类的对个标准流类的对象象n n extern istream extern istream cin;cin;/标准输入流对象标准输入流对象n n extern ostream extern ostream cout;cout;/标准输出流对象标准输出流对象n n extern ostream extern ostream cerr;cerr;/标准错误流(非缓冲)对标准错误流(非缓冲)对象象n n extern ostream extern ostream clog;clog;/标准错误流标准错误流(缓冲

13、缓冲)对象对象n n 输入就是从流中提取一个字节序列,用输入就是从流中提取一个字节序列,用“”“”运算符表示提运算符表示提取,称为提取运算符。输出就是向流中插入一个字节序列,取,称为提取运算符。输出就是向流中插入一个字节序列,用用“”“”运算符表示插入,称为插入运算符。运算符表示插入,称为插入运算符。n n 这两个这两个(li(li n n )运算符分别定义在类运算符分别定义在类ostreamostream和和istreamistream中。中。第10页/共54页第十一页,共54页。2023/2/6124.2 输入输出输入输出(shch)流类体流类体系系n nC+C+语言提供的流语言提供的流I

14、/OI/O的一个明显的特点是程序设计人员可的一个明显的特点是程序设计人员可以不考虑数据类型。如:以不考虑数据类型。如:n ncoutacoutbcinb表示输入变量表示输入变量b b的值。的值。尽管这里的变量尽管这里的变量a a和和b b的数据类型可能是的数据类型可能是intint、charchar、floatfloat等。等。然而,在然而,在C C语言当中,必须明确表示语言当中,必须明确表示a a和和b b的数据类型。而且的数据类型。而且在在C C语言中使用语言中使用printfprintf和和scanfscanf进行输入输出时,往往不能保进行输入输出时,往往不能保证输入输出的数据是可靠的和

15、安全的。证输入输出的数据是可靠的和安全的。n nC+C+输入输出中,编译系统对数据类型进行了严格的检查,输入输出中,编译系统对数据类型进行了严格的检查,凡是类型不正确凡是类型不正确(zhngqu)(zhngqu)的数据不能通过编译系统。的数据不能通过编译系统。第11页/共54页第十二页,共54页。2023/2/6134.2 4.2 输入输入输入输入(shr)(shr)输出流类体系输出流类体系输出流类体系输出流类体系n n【例【例4.14.1】使用流】使用流coutcout和和cerrcerr实现数据的输出实现数据的输出(shch)(shch)。n n#include#includen nusi

16、ng namespace std;using namespace std;n nint main(void)int main(void)n n n n float a,b;float a,b;n n cerr”cerr ab;cinab;n n if(b!=0)couta/b=a/bn;if(b!=0)couta/b=a/bn;n n else cerr”else cerr”除数为零除数为零!n”;!n”;n n return 0;return 0;n n 第12页/共54页第十三页,共54页。2023/2/6144.2 输入输入(shr)输出流类体系输出流类体系 对于输入提示信息或输出结果而

17、言,对于输入提示信息或输出结果而言,coutcout、cerrcerr和和clogclog的用法相的用法相同,但作用不同。同,但作用不同。cerrcerr的作用是向标准的作用是向标准(biozh(biozh n)n)错误设备错误设备(standard error device)(standard error device)输出有关出错信息。输出有关出错信息。coutcout流通常是传送到显流通常是传送到显示器输出,但也可以被重定向输出到磁盘文件,而示器输出,但也可以被重定向输出到磁盘文件,而cerrcerr流中的信息流中的信息只能在显示器输出。当调试程序时,往往不希望程序运行时的出错只能在显示

18、器输出。当调试程序时,往往不希望程序运行时的出错信息被送到其他文件,而要求在显示器上及时输出,这时应该用信息被送到其他文件,而要求在显示器上及时输出,这时应该用cerrcerr,cerrcerr流中的信息是用户根据需要指定的。流中的信息是用户根据需要指定的。clogclog流对象也是标准流对象也是标准(biozh(biozh n)n)错误流,它是错误流,它是console logconsole log的缩写。它的作用和的缩写。它的作用和cerrcerr相同,相同,都是在终端显示器上显示出错信息。不同的是都是在终端显示器上显示出错信息。不同的是cerrcerr不经过缓冲区,不经过缓冲区,直接向显

19、示器上输出有关信息,而直接向显示器上输出有关信息,而clogclog中的信息存放在缓冲区中,中的信息存放在缓冲区中,缓冲区满后或遇缓冲区满后或遇endlendl时向显示器输出。时向显示器输出。第13页/共54页第十四页,共54页。2023/2/6154.3 I/O流操作流操作(cozu)4.3.1 I/O4.3.1 I/O流的格式化流的格式化 格式化输入输出仅用于文本流,而二进制流是格式化输入输出仅用于文本流,而二进制流是原样原样(yun yn(yun yn)输入输出,不必做格式化转换。对输输入输出,不必做格式化转换。对输出格式的控制,可以用控制符方式,也可以用输出出格式的控制,可以用控制符方

20、式,也可以用输出流的成员函数来实现,两者的作用是相同的。流的成员函数来实现,两者的作用是相同的。1 1使用控制符输出格式。使用控制符输出格式。“iomanip.h”“iomanip.h”中预定义了中预定义了1313个格式控制符,用于控制输入输出数据的格式,如个格式控制符,用于控制输入输出数据的格式,如表表4-24-2所示。使用格式控制符,在程序中要包含所示。使用格式控制符,在程序中要包含iomanip.hiomanip.h头文件。头文件。第14页/共54页第十五页,共54页。2023/2/6164.3 I/O流操作流操作(cozu)2用用cout的成员函数控制输出格式。除了的成员函数控制输出格

21、式。除了(ch le)可以用控制符控制输出格式外,还可以通过调用可以用控制符控制输出格式外,还可以通过调用cout中的成员函数来控制输出格式。表中的成员函数来控制输出格式。表4-3列出了格式控制函数。列出了格式控制函数。表表4-4列出了格式控制函数(表列出了格式控制函数(表4-3)中用到的格式标志。这些标志被定义在)中用到的格式标志。这些标志被定义在ios_base 类中。类中。【例【例4.2】用格式控制符】用格式控制符setw、hex、dec指定输出数据的域宽和数制。指定输出数据的域宽和数制。#include#includeusing namespace std;第15页/共54页第十六页,

22、共54页。2023/2/6174.3 I/O流操作流操作(cozu)int main(void)int main(void)int a=256,b=128;int a=256,b=128;cout setw(8)a”b=”bn;/Line1cout setw(8)a”b=”bn;/Line1cout hexa”b=”decbn;/Line2cout hexa”b=”decbn;/Line2return 0;return 0;【例【例4.34.3】数据进制之间的转换。】数据进制之间的转换。#include /#include /因因iomanip.hiomanip.h中包含有中包含有iostre

23、am.hiostream.h,所,所以该命令以该命令(mng lng)(mng lng)也可省略也可省略#include#include using namespace std;using namespace std;第16页/共54页第十七页,共54页。2023/2/6184.3 I/O流操作流操作(cozu)int main()int x=30,y=300,z=1024;coutx y zendl;/按十进制输出 coutoctx y zendl;/按八进制输出 couthexx y zendl;/按十六进制 输出 coutsetiosflags(ios:showbase|ios:uppe

24、rcase);/设置基指示符和数值中的字母大写(dxi)输出 coutx y zendl;/仍按十六进制输出 coutresetiosflags(ios:showbase|ios:uppercase);/取消基指示符和数值中的字母大写(dxi)输出 coutx y zendl;/仍按十六进制输出 coutdecx y zendl;/按十进制输出第17页/共54页第十八页,共54页。2023/2/6194.3 I/O流操作流操作(cozu)return 0;运行(ynxng)结果:30 300 102436 454 20001e 12c 4000X1E 0X12C 0X41e 12c 40030

25、 300 1024第18页/共54页第十九页,共54页。2023/2/6204.3.2 用流成员函数实现输入输出用流成员函数实现输入输出1put函数。函数。put函数把一个字符写到输入流中,下面函数把一个字符写到输入流中,下面(xi mian)两个语句默认是相同的,但第二个受该流的格式化参量的影响:两个语句默认是相同的,但第二个受该流的格式化参量的影响:cout.put(A)/精确地输出一个字符精确地输出一个字符cout”很相像,主要的不同点是很相像,主要的不同点是get函数在读入数据时包括空白字符,而提取运算符在默认情况下拒绝接受空白字符。函数在读入数据时包括空白字符,而提取运算符在默认情况

26、下拒绝接受空白字符。get函数有不带参数、带一个参数、带三个参数三种调用形式。函数有不带参数、带一个参数、带三个参数三种调用形式。4.3 I/O流操作流操作(cozu)第19页/共54页第二十页,共54页。2023/2/6214.3 I/O流操作流操作(cozu)带一个参数的调用形式:带一个参数的调用形式:get(ch);带三个参数的调用形式:带三个参数的调用形式:get(字符数组字符数组,字符个数字符个数n,终止字符终止字符)3.getline函数函数getline成员函数的功能是允许从输入流中读取多个字符,并且成员函数的功能是允许从输入流中读取多个字符,并且(bngqi)允许指定输入终止字

27、符(默认值是换行字符),在读取完成后,从读取的内容中删除该终止字符。允许指定输入终止字符(默认值是换行字符),在读取完成后,从读取的内容中删除该终止字符。第20页/共54页第二十一页,共54页。2023/2/6224.4 文件文件(wnjin)流流和文件和文件(wnjin)的输的输入输出入输出4.4.1 文件流类与文件流对象文件在C+看来是字符流或二进制流,统称为文件流。根据(gnj)对字节流中字节的不同解释,将文件分为:文本文件和二进制文件。文本文件(也称ASCII码文件),每个字节为字符;二进制文件,每个字节为二进制数据。用于文件输入输出流被定义为文件类,在输入输出库中的文件类称为文件流类

28、,用文件流类定义的对象称为文件流对象。使用一个文件流,应遵循以下步骤:1打开一个文件,其目的是将一个文件流对象与某个磁盘文件联系起来。2使用文件流对象的成员函数,将数据写入到文件中或从文件中读取数据。第21页/共54页第二十二页,共54页。2023/2/6234.4 文件流和文件的输入文件流和文件的输入(shr)输出输出3关闭已打开的文件,即将文件流对象与磁盘文件脱离联系关闭已打开的文件,即将文件流对象与磁盘文件脱离联系(linx)。文件流类:文件流类:ifstream:输入文件流类,实现文件输入。输入文件流类,实现文件输入。ofstream:输出文件流类,实现文件输出。输出文件流类,实现文件

29、输出。fstream:输入输出文件流类,实现输入输出。输入输出文件流类,实现输入输出。第22页/共54页第二十三页,共54页。2023/2/6244.4 4.4 文件流和文件的输入文件流和文件的输入文件流和文件的输入文件流和文件的输入(shr)(shr)输出输出输出输出4.4.2 定义文件定义文件(wnjin)流对象流对象第23页/共54页第二十四页,共54页。2023/2/6254.4 4.4 文件流和文件的输入文件流和文件的输入文件流和文件的输入文件流和文件的输入(shr)(shr)输出输出输出输出使用前,应首先定义使用前,应首先定义(dngy)文件流对象。文件流对象。1定义定义(dngy

30、)一个文件对象。例如:一个文件对象。例如:ifstream infile;/定义定义(dngy)输入文件流对象输入文件流对象outfileifstream infile(filel.txt);/定义定义(dngy)输入文件流对象输入文件流对象infile,/并将并将infile与文件与文件“myfilel.txt”联系起来联系起来ofstream outfile;/定义定义(dngy)输出文件流对象输出文件流对象outfilefstream iofile;/定义定义(dngy)输入输入/输出文件流对象输出文件流对象iofile2.用文件流对象的成员函数用文件流对象的成员函数open()或构造函

31、数,打开一个文件。或构造函数,打开一个文件。例如:例如:outfile.open(file2.txt);3.用提取、插入运算或成员函数对文件读写。例如:用提取、插入运算或成员函数对文件读写。例如:infilech;4.用完文件后,要使用文件流对象的成员函数关闭文件。用完文件后,要使用文件流对象的成员函数关闭文件。例如:例如:infile.close();第24页/共54页第二十五页,共54页。2023/2/6264.4 4.4 文件流和文件的输入文件流和文件的输入文件流和文件的输入文件流和文件的输入(shr)(shr)输出输出输出输出4.4.3 文件的打开和关闭文件的打开和关闭打开文件有两种形

32、式打开文件有两种形式(xngsh):用文件流的成员函数用文件流的成员函数open()打开文件和用文件流类的构造函数打开文件打开文件和用文件流类的构造函数打开文件.1.用文件流的成员函数用文件流的成员函数open()打开文件。打开文件。ifstream、ofstream、fstream三个文件流类中各有一个成员函数三个文件流类中各有一个成员函数open()打开文件的格式为:打开文件的格式为:void ifstream:open(const char*,int=ios:in,int=filebuf:openprot);void ofstream:open(const char*,int=ios:o

33、ut,int=filebuf:openprot);第25页/共54页第二十六页,共54页。2023/2/6274.4 4.4 文件文件文件文件(wnjin)(wnjin)流和文件流和文件流和文件流和文件(wnjin)(wnjin)的输入输出的输入输出的输入输出的输入输出void fstream:open(const char*,int,int=filebuf:openprot);每一种打开方式是以一个二进制位来表示的,所以每一种打开方式是以一个二进制位来表示的,所以(suy)可以用运算符可以用运算符“|”(二进制按位或)将允许的几种打开方式组合起来使用。在多种方式及其组合打开文件时,含(二进制

34、按位或)将允许的几种打开方式组合起来使用。在多种方式及其组合打开文件时,含app或或ate方式的,文件指针会指向文件尾,其余方式的文件指针指向文件头。方式的,文件指针会指向文件尾,其余方式的文件指针指向文件头。第26页/共54页第二十七页,共54页。2023/2/6284.4 文件文件(wnjin)流和文件流和文件(wnjin)的输入输出的输入输出2.用文件流类的构造函数打开文件。用文件流类的构造函数打开文件。ifstream、ofstream、fstream三个文件流类的构造函数所带参数与各自的成员函数三个文件流类的构造函数所带参数与各自的成员函数open()所带的参数完全相同。因此,在说明

35、这三种文件流类的对象时,通过调用所带的参数完全相同。因此,在说明这三种文件流类的对象时,通过调用(dioyng)各自的构造函数,也能打开文件。例如:各自的构造函数,也能打开文件。例如:ifstream f1(filel.dat);ofstream f2(file2.txt);fstream f3(file3.dat,ios:in);第27页/共54页第二十八页,共54页。2023/2/6294.4 文件文件(wnjin)流和文件流和文件(wnjin)的输入输出的输入输出注意:注意:打开文件后要判断打开操作是否成功。打开文件操作打开文件后要判断打开操作是否成功。打开文件操作并不能保证总是正确的,

36、如果文件不存在、磁盘损坏并不能保证总是正确的,如果文件不存在、磁盘损坏等原因都是可能造成打开文件失败的原因。如果打开等原因都是可能造成打开文件失败的原因。如果打开文件失败后,程序文件失败后,程序(chngx)还继续执行文件的读还继续执行文件的读/写写操作,将会产生严重错误。在这种情况下,应使用异操作,将会产生严重错误。在这种情况下,应使用异常处理以提高程序常处理以提高程序(chngx)的可靠性。的可靠性。第28页/共54页第二十九页,共54页。2023/2/6304.4 文件文件(wnjin)流和文件流和文件(wnjin)的输入输出的输入输出说明(shumng):(1)由于在ios类中重载了取

37、反运算符“!”,即:int ios:operator!()return fail();。若文件打开成功,则“!f1”为0,否则“!f1”为非0。这样,判断文件打开与否的语句也可写成:ifstream f1(C:MyProgram file.dat);if(f1.fail()cout不能打开文件:C MyProgramfile.datn;exit(!);(2)打开输入文件时,若指定 ios:nocreate,则文件第29页/共54页第三十页,共54页。2023/2/6314.4 文件文件(wnjin)流和文件流和文件(wnjin)的输入输出的输入输出不存在打开失败;否则若文件不存在,仍产生一个空

38、的输入文件。不存在打开失败;否则若文件不存在,仍产生一个空的输入文件。(3)文件的关闭。每个文件流类中都提供有一个关闭文件的成员函数文件的关闭。每个文件流类中都提供有一个关闭文件的成员函数close(),当打开的文件操作结束后,就需要关闭它,使文件流与对应的物理文件断开(),当打开的文件操作结束后,就需要关闭它,使文件流与对应的物理文件断开(dun ki)联系,并能够保证最后输出到文件缓冲区中的内容,无论是否已满,都将立即写入到对应的物理文件中。文件流对应的文件被关闭后,还可以利用该文件流调用联系,并能够保证最后输出到文件缓冲区中的内容,无论是否已满,都将立即写入到对应的物理文件中。文件流对应

39、的文件被关闭后,还可以利用该文件流调用open成员函数打开其他的文件。成员函数打开其他的文件。第30页/共54页第三十一页,共54页。2023/2/6324.4 文件流和文件的输入文件流和文件的输入(shr)输出输出下面对文件的打开方式作几点说明:下面对文件的打开方式作几点说明:(1)文件的打开方式可以为上述的一个枚举常量,也可以为多个枚举常量(标志)通过逐位或()文件的打开方式可以为上述的一个枚举常量,也可以为多个枚举常量(标志)通过逐位或(|)运算符来连接。)运算符来连接。(2)当打开方式中不含有)当打开方式中不含有 ios:ate或或ios:app选项时,则文件指针被自动选项时,则文件指

40、针被自动(zdng)移到文件的开始位置,即字节地址为移到文件的开始位置,即字节地址为 0的位置。的位置。(3)当用输入文件流对象调用)当用输入文件流对象调用 open成员函数打开一个文件时,打开方式参数可以省略,默认按成员函数打开一个文件时,打开方式参数可以省略,默认按ios:in方式打开,若打开方式参数中不含有方式打开,若打开方式参数中不含有 ios:in选项时,则会自动选项时,则会自动(zdng)被加上。被加上。第31页/共54页第三十二页,共54页。2023/2/6334.4 文件文件(wnjin)流和文件流和文件(wnjin)的输入输出的输入输出4.4.5 二进制文件二进制文件(wnj

41、in)的输入输出的输入输出 例题如课本:例题如课本:第32页/共54页第三十三页,共54页。2023/2/6344.4 文件文件(wnjin)流和文件流和文件(wnjin)的输入输出的输入输出4.4.6 文件的随机访问文件的随机访问(fngwn)C+把每一个文件都看成一个有序的流,每一个文件或者以文件结束符(把每一个文件都看成一个有序的流,每一个文件或者以文件结束符(end of file marker)结束,或者在特定的字节编号处结束。)结束,或者在特定的字节编号处结束。第33页/共54页第三十四页,共54页。2023/2/6354.4 文件流和文件的输入文件流和文件的输入(shr)输出输出

42、 当打开一个文件时,该文件就和某个流关联当打开一个文件时,该文件就和某个流关联起来了。对文件进行读写实际上受到一个文件定起来了。对文件进行读写实际上受到一个文件定位指针(位指针(File Position Pointer)的控制,输入)的控制,输入(shr)流的指针也称为读指针,每一次提取操作流的指针也称为读指针,每一次提取操作将从读指针当前所指位置开始,每次提取操作自将从读指针当前所指位置开始,每次提取操作自动将读指针向文件尾移动。输出流指针也称写指动将读指针向文件尾移动。输出流指针也称写指针,每一次插入操作将从写指针当前位置开始,针,每一次插入操作将从写指针当前位置开始,每次插入操作也自动

43、将写指针向文件尾移动。每次插入操作也自动将写指针向文件尾移动。按数据存放在文件中的先后顺序进行读写,称为按数据存放在文件中的先后顺序进行读写,称为顺序读写。文件流类也支持文件的随机读写。顺序读写。文件流类也支持文件的随机读写。第34页/共54页第三十五页,共54页。2023/2/6364.4 文件流和文件的输入文件流和文件的输入(shr)输出输出对于输入流来说,用于文件读写位置定位的成员函数有:istream&istream:seekg(streampos);/绝对定位,相对(xingdu)于文件头 istream&istream:seekg(streamoff,ios:seek_dir);/

44、相对(xingdu)定位 streampos istream:tellg();/返回当前文件读写位置 对于输出流 来说,用于文件位置定位的成员函数有:ostream&ostream:seekp(streampos);/绝对定位,相对(xingdu)于文件头 ostream&ostream:seekp(streamoff,ios:seek_dir);/相对(xingdu)定位 streampos ostream:tellp();/返回当前文件读写位 置第35页/共54页第三十六页,共54页。2023/2/6374.4 文件流和文件的输文件流和文件的输入入(shr)输出输出说明:(1)函数名中的g

45、是get的缩写,p是put的缩写。(2)文件读写位置以字节为单位。(3)成员函数seekg(streampos)和seekp(streampos)都以文件开始处为参考点,将文件读写位置移到参数所指位置。(4)成员函数seekg(streamoff,ios:seek_dir)和seekp(streamoff,ios:seek_dir)的第二参数的值是文件读写位置相对定位的参考点;第一参数的值是相对于参考点的移动(ydng)值,若为负值,则前移,否则后移。(5)设按输入方式打开了二进制文件流对象:第36页/共54页第三十七页,共54页。2023/2/6384.4 文件文件(wnjin)流和流和文件

46、文件(wnjin)的输入的输入输出输出f.seekg(-10,ios:cur);/文件读写位置从当前位置前移 10个字节f.seekg(10,ios:cur);/文件读写位置从当前位置后移 10个字节f.seekg(-10,ios:end);/文件读写位置以文件尾为参考点,前移 10个字节。若文件尾位置值为 6000,则文件读写位置移到 5990处。(6)注意,在移动文件读写位置时,必须保证(bozhng)移动后的文件读写位置大于等于 0且小于等于文件尾字节编号,否则将导致接着的读/写数据不正确。第37页/共54页第三十八页,共54页。2023/2/6394.4 文件流和文件的输文件流和文件的

47、输入入(shr)输出输出(7)随机文件的读写分两步:先将文件读写位置移到开始读写位置;再用文件读写函数读或写数据。【例4.16】将5200之间的奇数存入(cn r)二进制文件,然后再将文件中的第3039位置之间的数依次读出并输出。第38页/共54页第三十九页,共54页。2023/2/6404.5 字符串流字符串流 文件在文件在C+看来是字符流或二进制流,文件流是以外存文件为输入输出对象的数据,所以看来是字符流或二进制流,文件流是以外存文件为输入输出对象的数据,所以(suy)文件流是与设备相关的。可以把流的概念应用到字符串(文件流是与设备相关的。可以把流的概念应用到字符串(String)上。这样

48、字符串就可以看作字符串流。字符串流不是以外存文件为输入输出的对象,而以内存中用户定义的字符数组为输入输出的对象。字符串流是与内存相关,所以)上。这样字符串就可以看作字符串流。字符串流不是以外存文件为输入输出的对象,而以内存中用户定义的字符数组为输入输出的对象。字符串流是与内存相关,所以(suy)也称内存流。也称内存流。建立字符串流对象的方法和定义如下:建立字符串流对象的方法和定义如下:1.建立输出字符串流对象。建立输出字符串流对象。ostrstream类提供的构造函数类提供的构造函数 的原型为:的原型为:ostrstream:ostrstream(char*buffer,int n,int 第

49、39页/共54页第四十页,共54页。2023/2/6414.5 字符串流字符串流 mode=ios:out);buffer是指向字符数组首元素的指针,是指向字符数组首元素的指针,n为指定的为指定的 流缓冲区的大小(一般选与字符数组的大小相同,流缓冲区的大小(一般选与字符数组的大小相同,也可以不同),第也可以不同),第3个参数是可选的,默认为个参数是可选的,默认为 ios:out方式。方式。2.建立建立(jinl)输入字符串流对象输入字符串流对象 istrstream类提供了两个带参数的构造函数,类提供了两个带参数的构造函数,istrstream类提供的构造函数的原型为:类提供的构造函数的原型为

50、:istrstream:istrstream(char*buffer);istrstream:istrstream(char*buffer,int n);第40页/共54页第四十一页,共54页。2023/2/6424.5 字符串流字符串流3.建立建立(jinl)输入输出字符串流对象。输入输出字符串流对象。strstream类提供的构造类提供的构造 函数的原型为:函数的原型为:strstream:strstream(char*buffer,int n,int mode);可以用以下语句建立可以用以下语句建立(jinl)输入输出字符串流对象:输入输出字符串流对象:strstream strio(a

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 管理工具

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁