《CIO流标准库实用实用教案》由会员分享,可在线阅读,更多相关《CIO流标准库实用实用教案(87页珍藏版)》请在金锄头文库上搜索。
1、什么(shnme)是流?从一个地方流到另一个地方,如水流、河流(hli)iostreams是同样的概念,是从一个地方流到另一个地方的数据流I/O流:数据在外部设备和内存之间的流动第第2页页/共共86页页第1页/共86页第一页,共87页。DataStream(数据流)data streamdataJust like a real stream you can put things in it and they will flow in a direction第第3页页/共共86页页第2页/共86页第二页,共87页。DataStream(数据流)data streamdatadata第第4页页/共
2、共86页页第3页/共86页第三页,共87页。DataStream(数据流)data streamdatadatadata“流流”(stream)实际上是一个字节)实际上是一个字节(z ji)序列(字节序列(字节(z ji)流),流),C+的输入的输入/输出输出是以字节是以字节(z ji)流的形式实现的。流的形式实现的。第第5页页/共共86页页第4页/共86页第四页,共87页。输入(shr)流与输出流输入流与输入设备(如键盘)相联系(linx)的流输出流与输出设备(如屏幕)相联系(linx)的流输入/输出流与输入/输出设备相联系(linx)的流第第6页页/共共86页页第5页/共86页第五页,共8
3、7页。输入输入(shr)流流data streamdatadatadata 键盘键盘 磁盘文件磁盘文件内内存存从输入流中获取数据的操作从输入流中获取数据的操作(cozu)称为输入、读或提取操作称为输入、读或提取操作(cozu)l由外部设备(wi b sh bi)流向内存的数据流例:cin i j; 12 15 cin 内存内存i ij j1512键盘键盘插入运算符插入运算符第第7页页/共共86页页第6页/共86页第六页,共87页。输出输出(shch)流流l l由内存由内存(ni cn)(ni cn)流向外部设备的数据流。流向外部设备的数据流。内存内存(ni (ni cn)cn)l l屏幕屏幕l
4、 l打印机打印机l l磁盘文件磁盘文件data streamdatadatadata将数据放入输出流的操作称为输出、写或插入操作。将数据放入输出流的操作称为输出、写或插入操作。 例: cout Hello World!n; cout Hello World!n内存内存插入运算符插入运算符第第8页页/共共86页页第7页/共86页第七页,共87页。I/O流类库在C+输入输出操作(cozu)是通过C+系统提供的完成I/O操作(cozu)的一组类实现的。主要包括:标准流类:处理与标准输入设备(键盘)和输出设备(显示器)关联的数据流文件流类:处理与磁盘文件关联的数据流字符串流类:利用内存中的字符数组处理
5、数据的输入输出异常类等:处理异常错误第第9页页/共共86页页第8页/共86页第八页,共87页。ios ostreamiostreamofstreamfstreamistreamifstreamcincout、cerr、clogI/O流类层次结构图第第10页页/共共86页页第9页/共86页第九页,共87页。I/O流类列表(libio)类类类类 名名名名说说说说 明明明明包含文件包含文件包含文件包含文件ios流的抽象基类iostream.histream通用输入流类和其他输入流的基类iostream.hostream通用输出流类和其他输出流的基类iostream.hifstream输入文件流类fs
6、tream.hofstream输出文件流类fstream.hiostream通用输入/输出流类和其他输入/输出流的基类iostream.hfstream输入/输出文件流类fstream.h第第11页页/共共86页页第10页/共86页第十页,共87页。预定(ydng)义的四个对象cin、cout、cerr、clogC+流类中已预定(ydng)义了四个对象: cin是istream类的对象,用于处理标准输入设备(键盘)的输入 cout是ostream类的对象,用于处理标准输出设备(屏幕)的输出 cerr是ostream类的对象,用于处理在标准设备上输出出错信息(不带缓冲) clog是ostream
7、类的对象,用于处理在标准输出设备上输出错误信息(带缓冲) 第第12页页/共共86页页第11页/共86页第十一页,共87页。文件文件(wnjin)的概念的概念C+把每个文件都看成(kn chn)是一个有序的字节序列,每个文件都以文件结束标志结束。例如:文件文件 文件是在计算机内存中以二进制表示的数据在外文件是在计算机内存中以二进制表示的数据在外部存储介质上的另一种部存储介质上的另一种(y zhn)(y zhn)存放形式。它可以使存放形式。它可以使数据得以长期保存。数据得以长期保存。 文件结束符 1 2 3 4 5 n-1 1 2 3 4 5 n-1第第13页页/共共86页页第12页/共86页第十
8、二页,共87页。文件文件(wnjin)操作操作 前面,我们讨论的输入输出都是以键盘前面,我们讨论的输入输出都是以键盘为输入设备,显示器为输出设备。在实际应为输入设备,显示器为输出设备。在实际应用中,常以磁盘文件用中,常以磁盘文件(wnjin)(wnjin)作为输入作为输入/ /输出的对象。输出的对象。读文件读文件(wnjin)(wnjin)(输入)(输入) 从磁盘文件从磁盘文件(wnjin)(wnjin)读取数据至内存读取数据至内存写文件写文件(wnjin)(wnjin)(输出(输出) ) 将内存数据输出到磁盘文件将内存数据输出到磁盘文件(wnjin)(wnjin)读读、写写文文件件( (w
9、w n nj ji i n n) )的的示示意意图图第第14页页/共共86页页第13页/共86页第十三页,共87页。二进制文件(wnjin)和文本文件(wnjin)文件通常分为二进制文件和文本文件。文本文件可以用文本编辑器打开查看便于(biny)阅读,读写时需要进行格式转换;二进制文件用文本编辑器打开时看到的是乱码,不便于(biny)阅读;读写时不需要格式转换,效率高。第第15页页/共共86页页第14页/共86页第十四页,共87页。文本文件(wnjin)与二进制文件(wnjin)文本文件 是由字符序列组成,它的每一个字节以ASCII码形式存放一个字符,又称为ASCII码文件 。例如,数字(sh
10、z)3.141按5个字符序列3、 . 、1 、4 、 1存储,占5个字节。00110011 00101100 00110001 110000100 00110001第第16页页/共共86页页第15页/共86页第十五页,共87页。文本文件(wnjin)与二进制文件(wnjin)二进制文件 是按数据在内存中的存储原样格式存储到磁盘文件中。 例如,数字(shz)3.141存储成二进制文件时占4个字节。 01000000 01001001 00001111 11010000 二进制文件输入、输出时不进行数据格式转换。一般是可执行程序、图形、图像、声音等文件。 第第17页页/共共86页页第16页/共86
11、页第十六页,共87页。处理(chl)和操作文件类ofstream用于向文件写数据类ifstream用于从文件中读数据类fstream用于向文件写或从文件读数据这些(zhxi)类都定义于头文件中第第18页页/共共86页页第17页/共86页第十七页,共87页。stream类ifstream重载(zhn zi)了运算符.istreamopen(fname)close( )eof( )cin 是是 istream 类的对象类的对象(duxing)第第19页页/共共86页页第18页/共86页第十八页,共87页。继承(jchng)(inheritance)ifstream.istreamopen(fnam
12、e)close( )eof( )ostreamofstreamopen(fname)close( )eof( )setw(n).ifstream 和 ofstreams 来于 fstream librarycincout第第20页页/共共86页页第19页/共86页第十九页,共87页。文件(wnjin)操作步骤对于文件操作要做以下事情(shqing)打开文件用于读和写检查打开是否成功读或写检查是否读完使用完文件后要关闭文件第第21页页/共共86页页第20页/共86页第二十页,共87页。方法方法(fngf)1(fngf)1: ofstream fout; / ofstream fout; /建立文
13、件输出流对象建立文件输出流对象 fout.open(“data.txt”, ios:out); / fout.open(“data.txt”, ios:out); /打开文件打开文件, ,使使foutfout与文件关联与文件关联方法方法(fngf)2:(fngf)2: ofstream fout(data ofstream fout(data txt, ios:out);txt, ios:out);打开(d ki)写文件先定义先定义ofstream(文件输出流)对象对象然后调用然后调用open()open()成员函数打开一个文件成员函数打开一个文件第第22页页/共共86页页第21页/共86页第
14、二十一页,共87页。#include #include using namespace std;int main() ofstream fout; /建立ofstream对象 fout.open(scores.txt, ios:out); /打开文件 / 写两行(lin xn) fout John 90 endl; fout Eric 85 endl; fout.close(); /关闭文件 return 0; 向文件(wnjin)中写数据第第23页页/共共86页页第22页/共86页第二十二页,共87页。向文件(wnjin)中写数据第第24页页/共共86页页第23页/共86页第二十三页,共87
15、页。关闭关闭(gunb)(gunb)文件文件当对文件操作完成后,应使用函数close()关闭该文件确保信息被保存释放文件以便其他(qt)程序使用ofstream fout; fout.open(“myfile.txt”);fout.close( ); /关闭(gunb)文件第第25页页/共共86页页第24页/共86页第二十四页,共87页。写文件写文件(wnjin)(wnjin)的另一种方式的另一种方式v当打开一个写文件时,缺省方式是创建一个新文件v当打开的文件已存在,文件原有内容被覆盖v当打开一个旧文件,不覆盖原有内容,打算接着v在后面写,可用打开方式选项app:(append)v使用多个打开
16、模式,中间(zhngjin)用运算符“|”分隔vvfout.open(out.txt,ios:out|ios:app);第第26页页/共共86页页第25页/共86页第二十五页,共87页。打开方式说明iosin打开文件进行读操作,(ifstream默认模式)iosout打开文件进行写操作,(ofstream默认模式)iosate打开一个已有输入或输出文件并查找到文件尾iosapp打开文件以便在文件的尾部添加数据iosnocreate如果文件不存在,则打开操作失败iostrunc如文件存在,清除文件原有内容(默认)iosbinary以二进制方式打开文件(wnjin)打开方式第第27页页/共共86页
17、页第26页/共86页第二十六页,共87页。打开(d ki)读文件先定义先定义ifstreamifstream(文件输入流)对象(文件输入流)对象然后调用然后调用(dioyng)open()(dioyng)open()成员函数打开一个文件成员函数打开一个文件第第28页页/共共86页页第27页/共86页第二十七页,共87页。方法1: ifstream fin; /建立ifstream 对象(duxing) fin.open(“data.txt”, ios:in); /打开文件并使 fin与该文件相关联 打开(d ki)读文件先定义先定义ifstreamifstream(文件(文件(wnjin)(w
18、njin)输入流)对象输入流)对象然后调用然后调用open()open()成员函数打开一个文件成员函数打开一个文件(wnjin)(wnjin)注: data.txt 需与正在运行的程序在同一目录第第29页页/共共86页页第28页/共86页第二十八页,共87页。方法1: ifstream fin; /建立(jinl)ifstream 对象 fin.open(data.txt“, ios:in); /打开文件并使 fin与该文件相关联方法2: ifstream fin(data.txt,ios:in); 打开(d ki)读文件先定义先定义ifstreamifstream(文件输入(文件输入(shr
19、)(shr)流)对象流)对象然后调用然后调用open()open()成员函数打开一个文件成员函数打开一个文件第第30页页/共共86页页第29页/共86页第二十九页,共87页。#include #include using namespace std;int main() ifstream fin; fin.open(scores.txt); /打开文件(wnjin)scores.txt / 开始从文件(wnjin)读数据 char name80; int score; fin name score; cout name score name score; cout name score end
20、l; fin.close(); return 0;从文件中读取数据第第31页页/共共86页页第30页/共86页第三十页,共87页。检查文件(wnjin)打开成功与否?检查文件打开成功与否有两种方法:判断fail()成员函数如果fail()=true表明文件打开失败(shbi)如果ifstream变量fin等于false如果fin=false表明文件打开失败(shbi)第第32页页/共共86页页第31页/共86页第三十一页,共87页。如果(rgu)fail做什么?选择之一是退出程序ifstreamfin;/建立ifstream变量fin.open(“myfile.txt”); /打开文件if(f
21、in.fail()/或if(!fin)检查文件是否准备(zhnbi)好cout num;while ( ! fin.eof( ) ) total += num; fin num;检测(jin c)文件尾第第36页页/共共86页页第35页/共86页第三十五页,共87页。/ open file with finint total = 0, num = 0;do total += num; fin num; while ( ! fin.eof( ) ) ;检测(jin c)文件尾第第37页页/共共86页页第36页/共86页第三十六页,共87页。练习(linx)打开名为infile.txt文件(wnj
22、in)从文件(wnjin)读出若干整数并将整数之和在屏幕输出将整数之平均值在屏幕输出第第38页页/共共86页页第37页/共86页第三十七页,共87页。答案(dn)#include #include #include using namespace std;int main( ) int num = 0, total = 0, count = 0;ifstream fin;fin.open( “infile.txt” );if( fin.fail( ) )cout num;while( ! fin.eof( ) ) count+; total += numfin num; if (count 0
23、 ) cout “The numbers in infile.txt have an”; cout “Total: “ total endl; cout “Average: “ total / count get( )getline( )read( )seekg()tellg()istreamopen()close( )eof( )ofstream通常会跳过空白符(空格符制表符换行符以及转义字符),当遇到输入(shr)的数据类型有错或文件结束符时,读取工作将终止。所以不能读入带空格的字符串。读入带空格的一行字符,需使用istream中的getline函数。第第42页页/共共86页页第41页/共
24、86页第四十一页,共87页。 istream类的类的getline()成员成员(chngyun)函数函数输入输入(shr)(shr)流对象流对象.getline(char *s,int n,char Delim=n) .getline(char *s,int n,char Delim=n) 从输入流中最多获取n-1个字符(包括空白符),在其后加入0,并将它们存放在由字符指针(zhzhn)s指向的内存空间。该函数返回当前输入流对象。若遇到终止字符(缺省为n )或流结束符,则提前结束读取。第第43页页/共共86页页第42页/共86页第四十二页,共87页。char message 8 ;cin.ge
25、tline ( message, 8 ) ; / 输入(shr)最多 7 个字符 加上 0getline( )第第44页页/共共86页页第43页/共86页第四十三页,共87页。istream类的get()成员(chngyun)函数char ch; ch = cin.get( );cin.get( ch );格式1:输入流对象名.get()从输入流中读取一个字符(z f)(包括空白符),并将该字符(z f)作为函数返回值,若遇流结束符(Ctrl+z),返回EOF格式2:输入流对象名.get(c)从输入流中读取一个字符(z f)(包括空白符)赋给字符(z f)变量c,若遇文件结束符,返回0,否则返
26、回非0。第第45页页/共共86页页第44页/共86页第四十四页,共87页。用输入(shr)char menuCh;cout menuCh;cout menuCh;Enter a menu choice:Q输出输出(shch)什么什么 ? 提取运算符提取运算符 通常通常(tngchng)(tngchng)会跳过空白符(空格符会跳过空白符(空格符 制表制表符符 换行符以及转义字符),当遇到输入的数据类型有错或文件结束符时,读取工作将换行符以及转义字符),当遇到输入的数据类型有错或文件结束符时,读取工作将终止。终止。第第46页页/共共86页页第45页/共86页第四十五页,共87页。用get()输入(
27、shr)char menuCh;cout “Enter a menu choice: “;cin.get( menuCh );cout menuCh;Enter a menu choice:Q输出输出(shch)(shch)什么什么? ?第第47页页/共共86页页第46页/共86页第四十六页,共87页。 ostream类的类的 put成员成员(chngyun)函数函数 put 函数的语法格式如下: ostream & put(char ch); 调用方式: 输出流对象.put(ch) 该函数仅输出存储在ch中的一个字符,且返回当前(dngqin)输出流对象 例如: cout.put(A).pu
28、t(t); 输出结果为:At第第48页页/共共86页页第47页/共86页第四十七页,共87页。思考(sko).如何将一个(y)文件内容拷贝到另一个(y)文件? 假如假如(jir)(jir)文本文件文本文件test1.txttest1.txt的内容为:的内容为: C+ is not difficult C+ is not difficult toto learn,as long as you study learn,as long as you study hard.hard.第第49页页/共共86页页第48页/共86页第四十八页,共87页。#include #include #include
29、using namespace std;int main( ) char ch;ifstream fin;ofstream fout;fin.open(infile.txt );if( fin.fail( ) )cout Error opening input filen;exit(1);第第50页页/共共86页页第49页/共86页第四十九页,共87页。fout.open(outfile.txt );if( fout.fail( ) )cout ch;while( ! fin.eof( ) ) fout ch;fin.close( );fout.close( ); return 0;第第51页
30、页/共共86页页第50页/共86页第五十页,共87页。fout.open(outfile.txt );if( fout.fail( ) )cout Error opening output filen;fout.close();exit(1); ch = fin.get( );while( ! fin.eof( ) ) fout.put(ch);ch = fin.get( );fin.close( );fout.close( ); return 0;Abettersolution第第52页页/共共86页页第51页/共86页第五十一页,共87页。用fstream类向文件(wnjin)写或从文件(
31、wnjin)读数据在前面的介绍中,你用ofstream写数据,用ifstream读数据。你还可以用fstream类创建一个输入流或输出(shch)流。如果程序中需用同一个流对象既输入又输出(shch),那么用fstream很方便。打开一个fstream文件,你必须要指定文件的打开模式,以告诉C+该文件如何被使用。第第53页页/共共86页页第52页/共86页第五十二页,共87页。打开用于输入和输出(shch)的文件voidmain()charcourse20;floatgrade;fstreaminout;inout.open(“grade”,ios:out);/打开方式不能省inoutC+89
32、.5endl;inoutEnglish93.5coursegrade;coutcoursegradecoursegrade;coutcoursegraden;inout.close();第第54页页/共共86页页第53页/共86页第五十三页,共87页。voidmain()charcourse20;floatgrade;fstreaminout;inout.open(grade,ios:out|ios:in);/打开方式不能省inoutC+89.5endl;inoutEnglish93.5coursegrade;coutcoursegradecoursegrade;coutcoursegrade
33、numname;foutnumname;读/写一个(y)字符ch=fin.get();/或in.get(ch)fout.put(ch);读/写一整行fin.getline(str,n);foutstrendl;第第57页页/共共86页页第56页/共86页第五十六页,共87页。二进制文件(wnjin)和文本文件(wnjin)文件是在计算机内存(nicn)中以二进制表示的数据在外部存储介质上的另一种存放形式。文件通常分为二进制文件和文本文件。第第58页页/共共86页页第57页/共86页第五十七页,共87页。文本文件(wnjin)与二进制文件(wnjin)文本文件 是由字符序列组成(z chn),它
34、的每一个字节以ASCII码形式存放一个字符,又称为ASCII码文件 。例如,数字3.141按5个字符序列3、 . 、1 、4 、 1存储,占5个字节。00110011 00101100 00110001 110000100 00110001第第59页页/共共86页页第58页/共86页第五十八页,共87页。文本文件(wnjin)与二进制文件(wnjin)二进制文件 是按数据在内存中的存储原样格式存储到磁盘文件中。 例如,数字3.141存储成二进制文件时占4个字节。 01000000 01001001 00001111 11010000 二进制文件输入、输出时不进行数据格式转换。一般是可执行程序、
35、图形、图像(t xin)、声音等文件。 第第60页页/共共86页页第59页/共86页第五十九页,共87页。文本(wnbn)方式和二进制方式当我们(wmen)按照文本方式往文件中写入数据时,一旦遇到换行字符(ASCII为10),则会转换为回车换行(ASCII为13、10)。在读取文件时,一旦遇到回车换行的组合(即连续的ASCII13、10),则会转换为换行字符(ASCII为10)。当我们(wmen)按照二进制方式往文件中写入数据,则将数据在内存中的存储形式原样输出到文件中。第第61页页/共共86页页第60页/共86页第六十页,共87页。文本(wnbn)vs.二进制I/O计算机并不区分文本文件和二
36、进制文件,所有文件都以二进制格式存储,文本文件输入、输出时需进行数据格式转换。二进制文件输入、输出时不需进行数据格式转换。在C+中进行二进制I/O,你需用二进制方式ios:binary打开文件,缺省时,打开一个(y)文件是文本方式。使用运算符,get,andgetline从文本文件读数据。从二进制文件读/写数据,要用stream流中的read和write函数。第第62页页/共共86页页第61页/共86页第六十一页,共87页。write函数(hnsh)write 函数的语法格式如下:流对象.write(char * address, int size)把从内存中指定位置(wi zhi)开始的固定
37、个数的字节送到指定流中,当流与文件关联时,数据写到文件指针所指示的位置(wi zhi)。第第63页页/共共86页页第62页/共86页第六十二页,共87页。Read函数(hnsh)read函数的语法格式如下:流对象.read(char*s,intn)将固定个数的字节从指定流输入到内存中指定地址开始的区域,当流与文件关联(gunlin)时,数据从文件指针所指定的文件地址开始输入。第第64页页/共共86页页第63页/共86页第六十三页,共87页。write函数(hnsh)该函数的用法是:输出流对象名.write(s,n)该函数输出字符指针(zhzhn)s与所指向的字符串中的n个字符。当s所指字符串不
38、足n时补空格,返回当前输出流对象。例:cout.write(ABCD,5).write(1234,3);输出结果为:ABCD123第第65页页/共共86页页第64页/共86页第六十四页,共87页。#include#includeusingnamespacestd;intmain()fstreambinaryio;binaryio.open(city.dat,ios:out|ios:binary);chars=Atlanta;binaryio.write(s,5);binaryio.close();return0;第第66页页/共共86页页第65页/共86页第六十五页,共87页。#include
39、#includeusingnamespacestd;intmain()fstreambinaryio;binaryio.open(city.dat,ios:in|ios:binary);chars10;binaryio.read(s,5);s5=0;couts;binaryio.close();return0;第第67页页/共共86页页第66页/共86页第六十六页,共87页。Write任意(rny)类型如何将非字符数据(shj)写入文件? int num = 6;fout.write( (char *)&num , sizeof(num);指定(zhdng)写入的字节数(4字节)将num的地址
40、强制转换为char * 指针( &num 是int * 指针)目的是把非字符数据强制按字节读取,以满足write函数的要求 第第68页页/共共86页页第67页/共86页第六十七页,共87页。使用write()函数(hnsh)将非字符型数据写入到二进制文件 第第69页页/共共86页页第68页/共86页第六十八页,共87页。read任意(rny)类型同样,如何从文件读出非字符(z f)数据文件?要用read函数 int num;fin.read( (char *)&num , sizeof(num);/将4个字节(z ji)读到整型变量 num 中。第第70页页/共共86页页第69页/共86页第六
41、十九页,共87页。二进制文件(wnjin)输入输出下例给出将一个(y )整型数组写入一个(y )二进制文件,再从文件读出。第第71页页/共共86页页第70页/共86页第七十页,共87页。intmain()inta5=4,2,0,6,5,i,b5;ofstreamfout(data3.dat,ios:out|ios:binary);ifstreamfin(data3.dat,ios:in|ios:binary);for(i=0;i5;i+)fout.write(char*)&ai,sizeof(ai);fout.close();for(i=0;i5;i+)fin.read(char*)&bi,s
42、izeof(bi);coutbi;coutendl;return0;二进制文件(wnjin)输入输出示例第第72页页/共共86页页第71页/共86页第七十一页,共87页。文件文件(wnjin)的读写方式的读写方式顺序方式:按数据在文件中的物理排列顺序依次读或写。随机(suj)方式:在文件的任何位置进行读或写。第第73页页/共共86页页第72页/共86页第七十二页,共87页。以随机方式(fngsh)读/写文件一个文件是由字节序列组成。每个文件都有一个特别标志称为文件指针,它可定位文件中的某一个字节。读/写操作发生(fshng)在文件指针处。当打开一个文件,文件指针在文件头,当你从文件读/写数据时
43、,文件指针会移到下一个数据项。第第74页页/共共86页页第73页/共86页第七十三页,共87页。以随机(suj)方式读/写文件对文件的读写受到一个定位指针的控制。读指针:从读指针当前所指位置读出数据,向后移动读指针使其指向下一个数据。写指针:把数据写到写指针当前所指位置,向后移动写指针,使其指向下一个写数据的位置。利用C+流类中提供(tgng)的成员函数,可改变读/写指针,从而实现对文件的随机读/写。随机访问多用于二进制文件。第第75页页/共共86页页第74页/共86页第七十四页,共87页。随机存取文件(wnjin)(续)例如: 如果用 get()函数读一个字符, C+ 从当前文件指针(zhz
44、hn)处读一个字节,现在文件指针(zhzhn)移到下一个字节处。第第76页页/共共86页页第75页/共86页第七十五页,共87页。定位写指针的成员(chngyun)函数操作写指针的成员函数(hnsh)1)移动写指针。调用格式1:输出流对象名.seekp(流中位置);调用格式2:输出流对象名.seekp(偏移量,参照位置);取ios类中的枚举量:beg相对文件头;curr相对文件当前位置;end相对文件尾。2)返回写指针当前位置(相对于文件头的字节数)。调用格式:输出流对象名.tellp()第第77页页/共共86页页第76页/共86页第七十六页,共87页。定位(dngwi)读指针的成员函数操作读
45、指针(zhzhn)的成员函数1)移动读指针(zhzhn)。调用格式1:输入流对象名.seekg(流中位置);调用格式2:输入流对象名.seekg(偏移量,参照位置);取ios类中的枚举量:beg相对文件头;curr相对文件当前位置;end相对文件尾。2)返回读指针(zhzhn)当前位置(相对于文件头的字节数)。调用格式:输入流对象名.tellg()第第78页页/共共86页页第77页/共86页第七十七页,共87页。seekp,seekg,tellp,tellg第第79页页/共共86页页第78页/共86页第七十八页,共87页。随机存取文件(wnjin)示例下例说明如何(rh)随机存取文件。程序中先
46、将10个数据写入文件,再从文件读出第3个数据。第第80页页/共共86页页第79页/共86页第七十九页,共87页。#include#includeusingnamespacestd;intmain()inta=4,2,6,0,5,1,2,9,8,7,num,i;fstreambinaryio(data.dat,ios:out|ios:binary);for(i=0;i10;i+)binaryio.write(char*)&ai,sizeof(int);binaryio.close();binaryio.open(data.dat,ios:in|ios:binary);binaryio.seekg
47、(2*sizeof(int),ios:beg);/设置读指针(zhzhn)cout文件指针(zhzhn)当前位置是binaryio.tellg()endl;binaryio.read(char*)&num,sizeof(num);cout第三个数是:numendl;cout文件指针(zhzhn)当前位置是binaryio.tellg()endl;binaryio.close();return0;运行(ynxng)第第81页页/共共86页页第80页/共86页第八十页,共87页。格式化输入输出I/OI/O格式化包括格式化包括: :设置字段宽度、对齐方式、输出数字设置字段宽度、对齐方式、输出数字的精
48、度等。的精度等。C+C+提供两种进行格式化输入提供两种进行格式化输入 输出的方法输出的方法: :用用iosios类的成员类的成员(chngyun)(chngyun)函数设置格式函数设置格式使用格式操纵算子使用格式操纵算子(manipultors)(manipultors)格式化输入输出是指控制格式化输入输出是指控制(kngzh)(kngzh)文本模式文本模式I/OI/O流的流的格式。格式。第第82页页/共共86页页第81页/共86页第八十一页,共87页。常用的格式化输出的成员(chngyun)函数 int width()返回当前输出数据时所占字符数返回当前输出数据时所占字符数(域宽域宽) in
49、t width(int) 设置输出域宽度,返回设置前的域宽度设置输出域宽度,返回设置前的域宽度 char fill() 返回当前所用返回当前所用(su yn)填充字符填充字符(缺省为空格符缺省为空格符) char fill(char)设置填充字符设置填充字符,返回设置前的填充字符返回设置前的填充字符 int precision() 返回当前输出浮点数时的有效数字个数返回当前输出浮点数时的有效数字个数 int precision(int) 设置输出浮点数时的有效数字个位,设置输出浮点数时的有效数字个位,返回设置前的有效数字个数返回设置前的有效数字个数第第83页页/共共86页页第82页/共86页第
50、八十二页,共87页。例:用例:用ios类成员函数设置类成员函数设置(shzh)格式。格式。程序说明:成员函数width只对一个输出项格式(g shi)有效 0123456789012345 1234 1234 12341234 * 123412.346 第第84页页/共共86页页第83页/共86页第八十三页,共87页。iostream类的常用(chn yn)操纵算子 操纵算子操纵算子 含义含义(hny) (hny) 适用适用 dec dec 设置基数为十进制设置基数为十进制 I/o I/o hex hex 设置基数为十六进制设置基数为十六进制 I/o I/o oct oct 设置基数为八进制设
51、置基数为八进制 I/o I/o endl endl 插入一换行符插入一换行符, ,并刷新缓冲区并刷新缓冲区 o o setw(int) setw(int) 设置数据输出域宽设置数据输出域宽 o o setfill(char) setfill(char) 设置填充字符设置填充字符 o o setprecision(int) setprecision(int) 输出浮点数据的有效数字个数输出浮点数据的有效数字个数 o o setiosflags(long) setiosflags(long) 设置参数所指定的格式标志位设置参数所指定的格式标志位 I/o I/oresetiosflags(long)
52、 resetiosflags(long) 清除参数所指定的格式标志位清除参数所指定的格式标志位 I/o I/o第第85页页/共共86页页第84页/共86页第八十四页,共87页。例:操纵算子使用例:操纵算子使用(shyng)示例示例 0123456789012345 *1234 1234* *1234 $12.346 程序(chngx)输出结果:第第86页页/共共86页页第85页/共86页第八十五页,共87页。感谢您的欣赏(xnshng)!第86页/共86页第八十六页,共87页。内容(nirng)总结什么是流。在C+输入(shr)输出操作是通过C+系统提供的完成。标准流类:处理与标准输入(shr)设备(键盘)和输出设备(显示器)关联的数据流。为输入(shr)设备,显示器为输出设备。该函数仅输出存储在ch中的一个字符,且返回当前输出流对象。inout.open(“grade”, ios:out)。inout.seekg(0, ios:beg)。文本方式和二进制方式。2)返回写指针当前位置(相对于文件头的字节数)。感谢您的欣赏第八十七页,共87页。