输入输出流与流类库

上传人:沈*** 文档编号:243867268 上传时间:2024-10-01 格式:PPT 页数:99 大小:2.20MB
返回 下载 相关 举报
输入输出流与流类库_第1页
第1页 / 共99页
输入输出流与流类库_第2页
第2页 / 共99页
输入输出流与流类库_第3页
第3页 / 共99页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,/99,面向对象程序设计(,C+,描述),成信院,第,二,章,输入输出流与流类库,*,2,/99,本章主要内容,流的定义、,C+,的预定义流,标准输入输出的预定义流对象,cin,、,cout,、,cerr,和,clog,格式化的,I/O,输入流,/,输出流专门操作,文件与文件流,文件操作:打开和关闭、文件的定位与随机存取、文件的读写,*,3,/99,I/O,流的概念,当程序与外界环境进行信息交换时,存在着两种对象,一种是,程序中的对象,,另一种是,文件对象,。,流是一种抽象,,它负责在数据的,生产者,和数据的,消费者,之间建立联系,并管理数据的流动。把数据的流动称为,流,。流在使用前要被建立,使用后要被删除,还要使用一些特定的操作,从流中获取数据或向流中添加数据。读操作在流数据抽象中被称为(从流中),提取,即输出,,写操作被称为(向流中),插入,即输入,。,程序建立一个,流对象,,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。,*,4,/99,iostream,类库概述,输入,/,输出操作在,C,和,C+,中没有定义,所有的,C+,编译器绑定了,iostream,类,用于,I/O,操作。在,iostream,类中,,“,流,(stream),”,是其核心概念。我们可以认为流对象就象一个,“,杰出的文件,”,,是,字节数据出入的源和目的地,。,*,5,/99,iostream,类库中各类间的关系图,iostream,类库概述,*,6,/99,ios,类,ios,类用来提供流的高级,I/O,操作。它是一个,虚基类,。提供输入输出所需的公共操作。,ios,类包含一个指向,streambuf,的指针,提供格式化标志进行格式化,I/O,处理,对,I/O,的错误处理,设置文件模式以及提供建立相关流的方法。,iostream,类库概述,*,7,/99,streambuf,类,streambuf,类主要负责缓冲区的处理。它提供对缓冲区的低级操作,如设置缓冲区,对缓冲区指针进行操作,从缓冲区提取字节,向缓冲区插入字节等,filebuf,strstreambuf,和,stdiobuf,都是,streambuf,的派生类,filebuf,提供文件缓冲区的管理,strstreambuf,使用字符串保存字符序列,提供在内存中提取和插入操作的缓冲区管理,stdiobuf,提供标准,I/O,文件的缓冲区管理,iostream,类库概述,*,8,/99,ostream,类及其派生类提供流的各种格式化、非格式化操作,对所有系统预定义的,输出流,重载运算符,“,”,,它有,3,个派生类:,ifstream,文件输入流类,用于对文件的提取操作,istrstream,串输出流类,用于对字符串的提取操作,istream,_,withassign,为标准输入流,cin,定义的输入流类,重载了赋值运算符。,iostream,类库概述,istream,类及其派生类,*,10,/99,iostream,由,istream,和,ostream,派生而来,综合了流的输入输出操作。它有,3,个派生类:,文件输入输出流类,fstream,串输入输出流类,strstream,标准输入输出流类,stdiostream,ios,类中的很多,操纵符(以一个流引用作为其参数,并返回同一流的引用,故它可以嵌入到输入,/,输出操作的链中),都可以应用于输入流。,操作符是在头文件,iostream,.h,中定义的,,,而操作函数是在,iomanip,.h,中定义,。,iostream,类库概述,输入输出流类,iostream,*,11,/99,屏 幕 输 出,方法,1,:,输出流,使用预定义的,插入(,)运算符,(,ostream,类中定义的运算符),,是所有,标准,C+,数据类型预先设计的,最重要的三个输出流是,ostream,ofstream,ostringstream,屏幕输出和键盘输入,*,12,/99,屏 幕 输 出,预先定义的输出流对象,:,cout,标准输出,cerr,标准错误输出,没有缓冲,发送给它的内容立即被输出。,clog,类似于,cerr,,但是有缓冲,缓冲区满时被输出。,屏幕输出和键盘输入,*,13,/99,屏 幕 输 出,格式:,ostream,&,operator ( char,ch,);,ostream,&,operator ( unsigned char,uch,);,ostream,&,operator ( signed char,sch,);,ostream,&,operator ( const char*,psz,);,ostream,&,operator ( const unsigned char*,pusz,);,ostream,&,operator ( const signed char*,pssz,);,ostream,&,operator ( short s );,ostream,&,operator ( unsigned short us );,ostream,&,operator (,int,n );,屏幕输出和键盘输入,*,14,/99,ostream,&,operator ( unsigned,int,un );,ostream,&,operator ( long l );,ostream,&,operator ( unsigned long,ul,);,ostream,&,operator ( float f );,ostream,&,operator ( double d );,ostream,&,operator ( long double ld ); (16-bit only),ostream,&,operator ( const void*,pv,);,ostream,&,operator (,streambuf,*,psb,);,ostream,&,operator (,ostream,& (*,fcn,)(,ostream,ostream,&,operator (,ios,& (*,fcn,)(,ios,功能:重载的操作符把对应的参数插入到输出流中,*,15,/99,屏 幕 输 出,方法,2,:,使用成员函数,put( ),格式:,ostream,&,put( char,ch,);,功能:把一个字符插入到输出流中,方法,3,:,使用成员函数,write( ),格式:,ostream,&,write( const char*,pch,int nCount,);,ostream,&,write( const unsigned char*,puch,int nCount,);,ostream,&,write( const signed char*,psch,int nCount,);,屏幕输出和键盘输入,*,16,/99,功能:从一缓冲区中把指定数量的字节数插入到输出流中。,例,1,#include ,using namespace std;,viod,main( ),int,a = 12;,cout,a ,),提取运算符,(),对于所有,标准,C+,数据类型都是预先设计好的。,cin,标准输入。,是从一个输入流对象获取字节最容易的方法。,ios,类中的很多,操纵符,都可以应用于输入流。但是只有少数几个对输入流对象具有实际影响,其中最重要的是进制操纵符,dec,、,oct,和,hex,。,屏幕输出和键盘输入,*,18,/99,输入流成员函数,open(),函数把该流与一个特定磁盘文件相关联。,get(),函数的功能与,提取运算符(,),很相像,主要的不同点是,get,函数在读入数据时,包括空白字符。,getline,(),的功能是从输入流中读取多个字符,并且允许指定输入终止字符,读取完成后,从读取的内容中删除终止字符。,read(),成员函数从一个文件读字节到一个指定的内存区域,由长度参数确定要读的字节数。如果给出长度参数,当遇到文件结束或者在文本模式文件中遇到文件结束标记字符时结束读取。,屏幕输出和键盘输入,*,19,/99,输入流成员函数,seekg,(),函数用来,设置,输入文件流中,读取数据位置的指针,tellg,(),函数,返回当前文件读指针的位置,close(),函数关闭与一个输入文件流关联的磁盘文件,屏幕输出和键盘输入,*,20,/99,键 盘 输 入,方法,1,:,输入流,重要的输入流类:,istream,类最适合用于顺序文本模式输入;,cin,是,其派生类,istream,_,withassign,的对象,ifstream,类支持磁盘文件输入,istringstream,屏幕输出和键盘输入,*,21,/99,键 盘 输 入,使用,提取运算符(,),的格式:,istream,&,operator ( char*,psz,);,istream,&,operator ( unsigned char*,pusz,);,istream,&,operator ( signed char*,pssz,);,istream,&,operator ( char&,rch,);,istream,&,operator ( unsigned char&,ruch,);,istream,&,operator ( signed char&,rsch,);,istream,&,operator ( short,istream,&,operator ( unsigned short,istream,&,operator (,int,屏幕输出和键盘输入,*,22,/99,istream,&,operator ( unsigned,int,istream,&,operator ( long,istream,&,operator ( unsigned long&,ul,);,istream,&,operator ( float,istream,&,operator ( double,istream,&,operator (long double (16-bit only),istream,&,operator (,streambuf,*,psb,);,istream,&,operator (,istream,& (*,fcn,)(,istream,istream,&,operator (,ios,& (*,fcn,)(,ios,功能: 从流对象中提取数据。,*,23,/99,键 盘 输 入,方法,2,:,使用成员函数,get( ),格式:,int,get();,istream,&,get( char*,pch,int nCount, char,delim,= n );,istream,&,get( unsigned char*,puch,int nCount, char,delim,= n );,istream,&,get( signed char*,psch,int nCount, char,delim,= n );,istream,&,get( char&,rch,);,istream,&,get( unsigned char&,ruch,);,istream,&,get( signed char&,rsch,);,*,24,/99,get(),函数功能:,int,get(),不带参数的函数,get,从指定的输入流中提取一个 字符(包括空白字符,),,并返回该字符作为函数调用的值。当遇到文件结束 符时,返回系统常量,EOF,istream,& get(char&,rch,),从指定输入流中提取一个字符(包括空白字符),把该字符写入,rch,引用的对象。当遇到文件结束符时,该函数返回,0,,否则返回对,istream,对象的引用,istream,& get(char *,pch,int nCount, char,delim,=,n,),从当前字符开始,读取,nCount,-1,个字符,或遇到指定分隔符,delim,结束。函数把读取的字符(不包括分隔符)写入数组,pch,中,并在字符串后添加,0,*,25,/99,方法,3,:,使用成员函数,read( ),格式:,istream,&,read( char*,pch,int nCount,);,istream,&,read( unsigned char*,puch,int nCount,);,istream,&,read( signed char*,psch,int nCount,);,功能:从流读出的字节序列赋给,pch,(,地址,),所指内存字节序列,参数,nCount,指定提取字节数。,键 盘 输 入,*,26,/99,例,2,#include ,using namespace std;,void main(),int,a;,char p11;,cin, a,;,cin,.get(p,10,a);,cout, a ,endl,;,/,endl,相当于, n ,cout, p ,endl,;,cin,.read(p, 4); /,从输入流当前位置读取,4,个字节,写入到,p,中,cout, p ,endl,;,因为,endl,包含在,std,中,所以如果用了,using namespace std,,那么就不用加头文件了。,为什么此处使用操纵符,“,endl,”,时不用包含,“,iomanip,.h,头文件,?,*,27,/99,输 出 宽 度,为满足用户对数据输入输出的格式化需要,,ios,提供直接设置标志字的控制格式函数,为了调整输出,可通过在流中放入,setw,操纵符或调用,width,成员函数为每个项指定输出宽度,int,width(,int nw,),设置下一个输出项的显示宽度为,nw,。如果,nw,大于数据所需宽度,在没有特别指示时,数据以右对齐方式显示。,如果,nw,小于数据所需宽度,则,nw,无效,数据以默认格式输出,。该函数设置,没有持续性,,输出一个项目后,恢复系统的默认设置,格式控制,*,28,/99,例,3,使用,width,控制输出宽度,#include ,using namespace std;,int,main(),double values = 1.23, 35.36, 653.7, 4358.24 ;,for(,int,i = 0; i 4; i+ ),cout,.width(10);,cout, valuesi n;,The output looks like this:,1.23,35.36,653.7,4358.24,*,29,/99,设置填充字符函数,char fill(char,cFill,),当设置宽度大于数据显示需要宽度时,空白位置以字符参数,cFill,填充。若数据 在宽度域左对齐,在数据右边填充,否则在左边填充。,默认填充符为空白符,。,如果要在同一行上为输出的数据设置宽度可以使用,setw,(),函数,该函数在,iomanip,.h,文件,中做了声明,在使用该函数时,必须包括该头文件。,设置填充字符和设置显示宽度,格式控制,*,30,/99,例,4,使用*填充,#include ,using namespace std;,void main(),double values = 1.23, 35.36, 653.7, 4358.24 ;,for(,int,i = 0; i 4; i+ ),cout,.width( 10 );,cout,.fill( * );,cout, valuesi ,endl,;,The output looks like this:,*1.23,*35.36,*653.7,*4358.24,*,31,/99,例,5,使用,setw,指定宽度,#include ,#include ,using namespace std;,void main(),double values = 1.23, 35.36, 653.7, 4358.24 ;,char *names = ,Zoot, Jimmy, Al, Stan ;,for(,int,i = 0; i 4; i+ ),cout,setw,( 6 ) namesi,setw,( 10 ) valuesi ,endl,;,The output looks like this:,Zoot,1.23,Jimmy 35.36,Al 653.7,Stan 4358.24,*,32,/99,输出对齐默认是右对齐文本,,如果要左对齐文本,可以使用,setiosflags,(,ios,:,lFlags,),函数,参数传入,ios,类中数据成员,ios,:left,为使前面例子中,name,中的字符串左对齐,,value,中的数值右对齐。修改循环段的内容如下:,for (,int,i = 0; i 4; i+ ),cout,setiosflags,(,ios,:left ),setw,( 6 ) namesi,resetiosflags,(,ios,:left ),/*,清除原有设置*,/,setw,( 10 ) valuesi ,endl,;,输 出 对 齐,格式控制,输出结果如下:,Zoot,1.23,Jimmy 35.36,Al 653.7,Stan 4358.24,*,33,/99,在,ios,类中声明了一个数据成员,用于记,录当前流的格式化状态,,这个数据成员称为,标志字,。标志字的每一位用于记录一种格式。为便于记忆,每一种格式定义了对应的,枚举常量,。上例中只是使用了,ios,类中标志字,ios,:left,下表列出了常用的标志常量名及意义:,标志常量,值,意义,输入,/,输出,ios,:,skipws,0x0001,跳过输入中的空白,I,ios,:left,0x0002,按输出域左对齐输出,O,ios,:right,0x0004,按输出域右对齐输出,O,ios,:internal,0x0008,在符号位或基指示符后填入字符,O,ios,:,dec,0x0010,转换基制为十进制,I/O,ios,:,oct,0x0020,转换基制为八进制,I/O,ios,:hex,0x0040,转换基制为十六进制,I/O,ios,:,showbase,0x0080,输出显示基指示符,O,ios,:,showpoint,0x0100,输出显示小数点,O,*,34,/99,标志常量,值,意义,输入,/,输出,os,:uppercase,0x0200,十六进制输出时一律用大写字母,O,ios,:,showpos,0x0400,正整数前加“,+”,号,O,ios,:scientific,0x0800,科学示数法显示浮点数,O,ios,:fixed,0x1000,定点形式显示浮点数,O,ios,:,unitbuf,0x2000,插入操作后立即刷新流,O,ios,:,stdio,0x4000,插入操作后刷新,stdout,和,stderr,O,*,35,/99,设置显示精度,系统提供显示精度的默认值是,6,。,float,类型最大设置示数精度是,6,位,,double,类型最大设置示数精度是,15,位 。我们可以根据需要设置示数精度,修改上例中循环部分内容如下:,for (,int,i = 0; i 4; i+ ),cout,setiosflags,(,ios,:left ),setw,( 6 ), namesi,resetiosflags,(,ios,:left ) /*,清除原有设置*,/,setw,( 10 ),setprecision,( 1 ), valuesi,endl,;,格式控制,输出结果如下:,Zoot,1,Jimmy 4e+001,Al 7e+002,Stan 4e+003,*,36,/99,例,6,控制输出精度,#include ,#include ,using namespace std;,int,main(),double values =1.23,35.36,653.7,4358.24;,char *names =,Zoot,Jimmy,Al,Stan;,cout,setiosflags,(,ios,:scientific);,for(,int,i=0;i4;i+),cout,setiosflags,(,ios,:left),setw,(6)namesi,resetiosflags,(,ios,:left),setw,(10),setprecision,(1), valuesiopen(filename,iosmode,);,注意:,fstream,派生于,ifstream,和,ofstream,,所以继承了它们的接口函数。以下示例都以,fstream,为例。,磁盘文件,*,45,/99,格式:,1,、,.open(,,,);,2,、,文件流,(, );,打开方式,:,ios,:in,读方式打开,ios,: out,写方式打开,ios,: app,追加方式,ios,: ate,文件打开时,文件指针位于文件尾,ios,:,trunc,如果文件存在,清除原有内容。若文件,不存在,则创建,ios,: binary,以二进制方式打开文件,ios,:,nocreate,打开已有的文件,如果文件不存在,则,打开失败,ios,:,noreplace,如果文件存在,除非设置,ios,:ate,或,ios,:app,,,否则打开失败,磁盘文件,文件的打开,*,46,/99,“,打开文件,”,通常通过,构造函数,自动完成(也可,显式调用成员函数,open,完成)。,“,关闭文件,”,通常通过使用,“,.close();,”,来,显式完成,。,例,1:,ofstream,outfile1(myfile1.txt);,创建,ofstream,类的对象,outfile1,;使流类对象,outfile1,与磁盘文件,myfile1.txt,相联系;并打开用于,“,写,”,的磁盘文件,myfile1.txt,。,例,2:,/,创建,ofstream,类的对象,outfile1,ofstream,outfile1;,/,显式调用成员函数,open,来打开文件,outfile1.open(myfile1.txt);,文件的打开,*,47,/99,1.,ifstream,:,ifstream,ifstream,( const char*,szName,int nMode,=,ios,:in,int nProt,=,filebuf,:,openprot,);,参数,:,(1),szName,:文件名;,(2),nMode,:打开文件的方式。,ios,:in,以读,(,输入,),为目的打开。,ios,:,nocreate,仅打开一个已存在文件。,ios,:binary,打开二进制文件。,(3),nProt,:指定所打开文件的保护方式。,filebuf,:,openprot,表示兼容共享方式。,与创建流类对象相关的三个构造函数,*,48,/99,2.,ofstream,:,ofstream,ofstream,( const char*,szName,int nMode,=,ios,:out,int nProt,=,filebuf,:,openprot,);,参数,:,(1),szName,:文件名;,(2),nMode,:打开文件的方式。,ios,:out,以写,(,输出,),为目的打开文件。,ios,:,trunc,若文件存在,则将文件长度截为,0,。,ios,:binary,打开二进制文件。,ios,:app,以追加方式打开。,.,(3),nProt,:指定所打开文件的保护方式。,与创建流类对象相关的三个构造函数,*,49,/99,3.,fstream,:,fstream,fstream,( const char*,szName,int nMode,int nProt,=,filebuf,:,openprot,);,说明:参数含义和用法与,ofstream,构造函数处相同。,与创建流类对象相关的三个构造函数,*,50,/99,1.,ofstream,:open,void open( const char*,szName,int nMode,=,ios,:out,int nProt,=,filebuf,:,openprot,);,2.,ifstream,:open,void open( const char*,szName,int nMode,=,ios,:in,int nProt,=,filebuf,:,openprot,);,3.,fstream,:open,void open( const char*,szName,int nMode,int nProt,=,filebuf,:,openprot,);,与创建流类对象相关的三个,open,函数,*,51,/99,例如:,#include ,fstream,f1;,f1.open( ,my,file,.,dat,ios,:out);,或,:,fstream,f1( ,myfile,.,dat,ios,:out);,关闭文件的格式如下:,.close( );,例如:,f1.close( );,磁盘文件,文件的打开与关闭,*,52,/99,对文件的,“,读写操作,”,通常使用预定义的,类成员函数,来实现(随后介绍),但也可使用继承而来的,插入和提取运算符,“,”,和,“,”,,所以,,ifstream,流(类对象)可以使用预定义的算符,“,”,来对自定义磁盘文件进行,“,读,”,操作(允许通过派生类对象直接调用其基类的公有成员函数);,ofstream,类由,ostream,类所派生,,而,ostream,类中预定义了公有的运算符,重载函数,“,operator ,”,,所以,,ofstream,流(类对象)可以使用预定义的算符,“,”,和,“,”,来对自定义磁盘文件进行,“,读,”,与,“,写,”,操作。,还有一点需要注意:使用预定义的算符,“,”,来进行,“,读,”,操作时遇空格或换行均结束一个数据相呼应。,下述示例程序做了如下,3,件事:,1),往文件写数据;,2),往文件尾部追加数据;,3),从文件读出数据并显示在屏幕上。,读写操作,*,54,/99,#include ,int,main() ,/1),往文件写数据,ofstream,outfile1(“myfile1.txt”);,/,以,“,写,”,方式打开,outfile1,“Hello!.CHINA! CUIT”,endl,;,outfile1.close();,/2),往文件尾部追加数据,outfile1.open(“myfile1.txt”,ios,:app,);,/,以,“,追加,”,方式打开,int,x,=,1212,y,=,6868;,outfile1x“ ”y,str1,str2;,/,使用,“,”,读,(,遇空格、换行均结束,),infile1,x2,y2;,infile1.close();,*,55,/99,cout,“str1=”,str1,endl,;,cout,“str2=”,str2,endl,;,cout,“x2=”,x2,endl,;,cout,“y2=”,y2,endl,;,/,程序执行后的显示结果如下:,str1=Hello!.CHINA!,str2=CUIT,x2=1212,y2=6868,*,56,/99,1,类成员函数,get,与,put,2,类成员函数,read,与,write,3,类成员函数,getline,使用类成员函数对文件流进行操作,*,57,/99,ostream,& put( char,ch,);,功能:将字符,ch,写到自定义文件中。,istream,& get( char&,rch,);,功能:从自定义文件中读出,1,个字符放入引用,rch,中。,注意,,put,实际上只是,ostream,类中定义的公有成员函数,当然通过其派生类,ofstream,的类对象也可以直接对它进行调用。同理,通过,ifstream,的类对象可以直接调用,get,。,用类成员函数,get,与,put,*,58,/99,程序示例,从键盘输入任一个字符串,通过,put,将其写到自定义磁盘文件,“,putgetfile,.txt,”,中,而后再使用,get,从该文件中读出所写串并显示在屏幕上,。,#include ,#include ,void main() ,/,键盘输入字符串,通过,put,将其写到自定义磁盘文件中,char,str,80;,cout, Input string: ,endl,;,gets(,str,);,ofstream fout,( ,putgetfile,.txt );,int,i = 0;,while (,str,i ),fout,.put(,str,i+);,fout,.close();,cout, - ,endl,;,*,59,/99,/,而后使用,get,从文件中读出该串显示在屏幕上,char,ch,;,ifstream,fin( ,putgetfile,.txt );,fin.get(,ch,);,while( !fin.,eof,() ),/,从头读到文件结束,(,当前符号非文件结束符时继续,),/,注,:,成员函数,eof,(),在读到文件结束时方返回,true,cout,ch,;,fin.get(,ch,);,cout,endl,;,fin.close();,/,程序执行后的显示结果如下:,Input string:,File operating - using put and get, OK! 12345,-,File operating - using put and get, OK! 12345,*,60,/99,程序示例,对指定文件进行拷贝,使用类成员函数,get,与,put,对指定文件进行拷贝。被拷贝的,“,源文件,”,以及拷贝到的,“,目的文件,”,的名字与路径均由命令行参数来提供。,程序执行结果,(,若提供的命令行参数为,:,mycopy,.,cpp res,_1.,cpp,):,Copy file from ,mycopy,.,cpp, to ,res,_1.,cpp,程序执行结果,(,若提供的命令行参数个数不对时,):,ERROR ! - supplying 2 command-line,argements,?!,*,61,/99,#include ,void main(,int argc, char*,argv,),if(,argc,!=,3) ,/,命令行参数个数不对时,cout,ERROR ! - supplying 2 command-line,argements,?! ,endl,;,exit (1);,cout, Copy file from ,argv,1, to ,argv,2, ,endl,;,ifstream,fin(,argv,1);,/,命令行参数,1,作为文件名,ofstream fout,(,argv,2);,/,命令行参数,2,作为文件名,char,ch,;,fin.get(,ch,);,while(!fin.,eof,(),/,从头读到文件结束,fout,.put(,ch,);,fin.get(,ch,);,fin.close();,fout,.close();,*,62,/99,类成员函数,read,与,write,通常使用,read,与,write,对二进制文件,(binary file),进行读写。,ostream,& write( const char*,pch,int nCount,);,功能:将,pch,缓冲区中的前,nCount,个字符写出到某个文件中。,istream,& read( char*,pch,int nCount,);,功能:从某个文件中读入,nCount,个字符放入,pch,缓冲区中(若读至文件结束尚不足,nCount,个字符时,也将立即结束本次读取过程)。,注意:使用,write,与,read,进行数据读写时,不必要在数据间再额外,“,插入,”,分割符,这是因为它们都要求提供第二实参来指定读写长度。,*,63,/99,以下的示例程序先使用,write,往自定义二进制磁盘文件中写出如下,3,个,“,值,”,:字符串,str,的长度值,Len(,一个正整数,),、字符串,str,本身、以及一个结构体的数据,而后再使用,read,读出这些,“,值,”,并将它们显示在屏幕上。,#include ,int,main( ),char,str,20,=,Hello world!;,struct stu,char name20;,int,age;,double score;,ss,=,“,wu jun,”,19,91.5;,*,64,/99,cout,WRITE to ,wrt,_read_file.bin,endl,;,/,打开用于,“,写,”,的二进制磁盘文件,ofstream fout,(,wrt,_read_file.bin,ios,:binary);,int,Len,=,strlen,(,str,);,fout,.write( (char*)(&Len),sizeof,(,int,) );,fout,.write(,str,Len);,/,数据间无需分割符,fout,.write(char*)(&,ss,),sizeof,(,ss,);,fout,.close();,cout, - ,endl,;,cout,- READ it from ,wrt,_read_file.bin -,endl,;,char str280;,ifstream,fin(,wrt,_read_file.bin,ios,:binary);,fin.read( (char*)(&Len),sizeof,(,int,) );,fin.read(str2,Len);,str2Len,=,0;,*,65,/99,fin.read( (char*)(&,ss,),sizeof,(,ss,) );,cout,Len=,Len,endl,;,cout,str2=,str2,endl,;,cout,ss,.name,ss,.age,ss,.score,endl,;,fin.close();,cout, - ,wu jun,19,91.5,-,*,66,/99,最常用格式为:,istream,&,getline,( char*,pch,int nCount,char,delim,= n );,功能:从某个文件中读出一行,(,至多,nCount,个字符,),放入,pch,缓冲区中,缺省行结束符为,n,。,程序实例,:,读出,“,getline,.,cpp,”,的各行并显示在屏幕上(如,可将本源程序存放在,“,getline,.,cpp,“,文件中)。,类成员函数,getline,*,67,/99,#include,int,main( ) ,char line81;,ifstream infile,(,“,getline,.,cpp,”,);,/,打开文件用于读,/,读出一行,(,至多,80,个字符,),放入,line,中,infile,.,getline,(line, 80);,while(,!,infile,.,eof,(),) ,/,尚未读到文件结束则继续循环,(,处理,),cout,line,endl,;,/,显示在屏幕上,infile,.,getline,(line,80);,/,再读一行,infile,.close();,*,68,/99,text,文件与,binary,文件,对,text,文件与,binary,文件的一般使用示例,采用,binary,文件
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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