版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第13章 输入输出流13.1 C+的输入和输出13.2 标准输出流13.3 标准输入流13.4 对数据文件的操作与文件流13.1 C+的输入和输出输入和输出,要站在内存中程序的立场来看: 输入:将某设备中的数据传送给程序;设备中的数据叫输入文件。 输出:将程序中的数据传送到某设备;设备得到的数据叫输出文件。以键盘/显示器作为标准输入/输出设备: 从键盘、鼠标等得到的数据是进入内存中程序的,该数据是输入数据(输入文件)。 将数据从内存中程序送到显示器、打印机等,该数据是输出数据(输出文件)。以外存磁盘文件作为设备: 内存中程序的数据存储到磁盘文件中,叫输出文件;从磁盘文件中的数据装载入内存中,叫
2、输入文件。以内存中指定的空间作为设备:字符串的输入输出。 在C+语言中,数据的输入和输出(简写为I/O)包括对标准输入设备“键盘”和标准输出设备“显示器”、对在外存磁盘上的文件和对内存中指定的字符串存储空间进行输入输出这三个方面。 对标准输入设备和标准输出设备的输入输出简称为标准I/O;对在外存磁盘上文件的输入输出简称为文件I/O;对内存中指定的字符串存储空间的输入输出简称为串I/O。C+的输入和输出 C+中把数据的传送过程称作流。在C+中,流既可以表示数据从内存传送到某个载体或设备中,即输出流;也可以表示数据从某个载体或设备传送到内存的变量中,即输入流。 在进行I/O操作时,首先进行“打开”
3、操作,使流和文件发生联系,建立联系后的文件才允许数据流入或流出,输入或输出结束后,使用“关闭”操作使文件与流断开联系。 C+将输入输出流定义为类-流类。属于流类的对象是流对象。如:cin-标准输入流对象。 cout标准输出流对象。C+的输入流和输出流各种流类C+为实现数据的输入和输出定义了一个庞大的类库。它包括的类主要有 ios,istream,ostream,iostream,ifstream,ofstream,fstream,istrstream,ostrstream,strstream 等。头文件中定义的类 C+系统中的I/O类库,其所有类被包含在iostream,fstream和str
4、stream 这三个系统头文件中,各头文件包含的类如下:iostream头文件包含有: ios, iostream, istream, ostream, iostream_withassign, istream_withassign, ostream_withassign等。fstream包含有: fstream, ifstream, ofstream和fstreambase, 以及iostream中的所有类。strstream包含有: strstream, istrstream, ostrstream和strstreambase, 以及iostream中的所有类。 包含头文件在一个程序中当需
5、要进行标准I/O操作时,则必须包含头文件iostream;当需要进行文件I/O操作时,则必须包含头文件fstream; 当需要进行串I/O操作时,则必须包含头文件strstream。当使用格式化I/O时,则包含头文件iomanip在一个程序中包含一个头文件的命令格式为“#include” 如:#include 4个流对象 cin,cout,cerr, clog C+不仅定义有现成的I/O类库供用户使用,而且还为用户进行标准I/O操作定义了四个类对象,它们分别是cin,cout,cerr和clog. cin : istream_withassign流类的对象,使用标准输入设备键盘,是从键盘输入数
6、据传送到内存的数据流,也称为cin流或标准输入流. 后三个为ostream_withassign流类的对象: cout : 使用标准输出设备显示器,是从内存数据传送到显示器的数据流,也称为cout流或标准输出流. 4个流对象 cin,cout,cerr, clog cerr和clog含义相同,均代表将错误信息输出到显示器的流。 当进行键盘输入时使用cin流; 当进行显示器输出时使用cout流; 当进行错误信息输出时使用cerr流或clog流。 13.2 标准输出流 cout流对象-Console output缩写. 在控制台(显示器)输出.用流插入运算符“”向cout输出数据.如: cout
7、“a=” a endl; cout 数据1 数据2 数据3; 这里的数据都是C+的基本类型的数据. 若是自定义类型的数据(如结构体), 则必须对“”重载后才能输出.13.2 标准输出流 cerr流对象-Console error. 在控制台(显示器)输出错误信息.用流插入运算符“”向cerr输出数据.如: cerr “除数为0, 出错!” endl; cerr的用法与cout类似.不同: cout的输出目标默认是显示器,但可以被重定向为输出到磁盘文件。 cerr不能重定向输出。例13.1 解一元二次方程ax2+bx+c=0 的解。int main( ) float a, b, c, disc;
8、 cout a b c; if (a=0) cerr “ a=0, 不是二次方程,出错!”endl; else disc=b*b-4*a*c; if (disc0) cerr“二次方程无实根。”endl; else cout“x1=”(-b+sqrt(disc)/(2*a)endl; cout “x2=”(-b-sqrt(disc)/(2*a)endl; return 0;clog流对象-在控制台(显示器)输出错误信息.用流插入运算符“”向clog输出数据.如: clog “除数为0, 出错!” endl; clog的用法与cerr类似.不同: cerr是不经过缓冲区,直接向显示器输出有关信息
9、。而clog的输出先存储在缓冲区,遇到缓冲区满或遇到endl时才向显示器输出。标准类型数据的格式输出使用控制符控制输出格式dec - 设置整数的基数为10hex - 设置整数的基数为16oct - 设置整数的基数为8setfill(c) - 设置填充字符csetprecision(n) - 设置实数的显示精度为n位setw(n) - 设置字段宽度为nsetiosflags(ios:fixed) - 实数以固定的小数位数显示setiosflags(ios:scientific) - 实数以科学记数显示例: 用控制符控制输出格式#include #include using nanespace s
10、td;int main( ) int a; cout a; / 输入34 cout“dec:”decaendl; /显示: dec:34 cout“hex:”hexaendl; /显示: hex:22 cout“oct:”octaendl; /显示: oct:42 coutsetfill(*)setw(10)decaendl; / *34 return 0;格式输出2. 使用流对象的成员函数控制输出格式cout.precision(n) 与格式控制符setprecision(n) 相似cout.width(n) 与格式控制符setw(n)相似cout.fill(c) 格式控制符setfill(
11、c)相似cout.setf(格式标志) 与setiosflags (格式标志) 相似cout.unsetf(格式标志) 与resetioflags(格式标志)相似 格式标志:ios:left 左对齐ios:right 右对齐ios:internal 两边对齐ios:doc 十进制例: 用流控制成员函数控制输出格式#include #include using nanespace std;int main( ) int a; cout a; / a=34 cout“hex:”hexaendl; /显示: hex:22 cout.setf(ios:hex); cout“hex:”aendl; /
12、hex:22 cout.unsetf(ios:hex); cout.fill(*); cout.width(10); cout.setf(ios:dec); coutaendl; / *34 return 0;用流成员函数put输出字符 cout.put(字符); 输出一个字符如: cout.put(a); 输出 a cout.put(97); 输出 aC语言的函数: putchar(字符);如: putchar(a);例13.3 有一个字符串BASIC,要求把它们按相反的顺序输出。#include using namespace std;int main( )char *p=BASIC; /
13、字符指针指向B for(int i=4; i=0; i-) cout.put(*(p+i); /从最后一个字符开始输出 cout.put( n ); return 0;运行时在屏幕上输出: CISAB13.3 标准输入流 标准输入流是指从标准输入设备(键盘)流向程序中的变量的数据. cin流对象 int a,b; cin ab; / 从键盘输入2个整数 当输入时遇到无效的字符或遇到文件结束符ctrl+C时, cin处于出错状态,无法正常提取数据.如:输入:123 abc a接收了123 b无法接收输入值,cin被置为出错状态,cin的值为0(假值)。 if (!cin) / cin处于出错状态
14、,无法正常提取数据 cout“输入出错”;例 通过测试cin的真值,判断流对象是否处于正常状态。#include using namespace std;int main( ) float grade; coutgrade) /能从cin流读取数据 if(grade=85) coutgradeGOOD!endl; if(grade60) coutgradefail!endl; coutenter grade:; coutThe end.endl; return 0;例 通过测试cin的真值,判断流对象是否处于正常状态。#include using namespace std;int main(
15、 ) float grade; coutgrade) /能从cin流读取数据 if(grade=85) coutgradeGOOD!endl; if(grade60) coutgradefail!endl; coutenter grade:; coutThe end.endl; return 0;enter grade: 67enter grade: 8989 GOOD!enter grade: 5656 fail!enter grade: 100100 GOOD!enter grade: CThe end.用于字符输入的流成员函数不带参数的get函数 cin.get() 从输入流提取1个字符
16、; 函数返回值就是该字符.若遇到文件结束符,则返回值为EOF,即 -1. 如: char ch; while ( (ch=cin.get()!=EOF) cout.put(ch); 键盘输入: I study C+. 显示: I study C+. 键盘输入: Ctrl+C (程序结束)用于字符输入的流成员函数2. 带1个参数的get函数 cin.get(ch) 从输入流提取1个字符放入ch, 函数返回值是非0值.若遇到文件结束符,则返回值为0. 如: char ch; while ( cin.get(ch)!=0) cout.put(ch); 键盘输入: I study C+. 显示: I
17、study C+. 键盘输入: Ctrl+C (程序结束)用于字符输入的流成员函数3. 带3个参数的get函数 cin.get(字符数组, 字符个数n, 终止字符)或 cin.get(字符指针, 字符个数n, 终止字符) 从输入流提取n-1个字符放入数组, 函数返回值是非0值.若遇到文件结束符,则返回值为0. 如: char str20; cin.get(str, 10, n); coutstr; 键盘输入: I study C+. 显示: I study C用于字符输入的流成员函数4. cin.getline函数 cin.getline(字符数组, 字符个数n, 终止字符)或 cin.get
18、line(字符指针, 字符个数n, 终止字符) 从输入流提取n-1个字符放入数组, 函数返回值是非0值.若遇到文件结束符,则返回值为0. 如: char str20; cin.getline(str, 10, n); coutstr; 键盘输入: I study C+. 显示: I study Ccin.get 与 cin.getline 的区别 cin.get(字符数组, 字符个数n, 终止字符)和 cin.getline(字符指针, 字符个数n, 终止字符)相同: 从输入流提取n-1个字符放入数组, 函数返回 值是非0值.若遇到文件结束符,则返回值为0.不同: 当读到终止字符时,cin.g
19、etline将指针移到 终止字符之后。get将指针移到终止字符处。 则下次继续读取时的位置就不同。用于字符输入的流成员函数5. cin.eof函数 cin.eof(): 当从输入流读取数据到达文件尾,函数值为真。 如: char c; while (!cin.eof() if (c=cin.get()!= ) cout.put(c); coutendl; 键盘输入: I study C+. 显示: IstudyC+.13.4 对数据文件的操作与文件流文件: 存储在某种设备(磁带、光盘、软盘或硬盘)上数据的集合;对用户来说,文件分成两大类: 程序文件, 数据文件.从文件中数据的组织形式来分: A
20、SCII文件(文本文件), 二进制文件通常,操作系统管理文件,跟踪它们的位置、大小、创建时间等。除非在操作系统级别上编程,否则不必担心这些事情.13.4.1 文件的概念文本文件和二进制文件文本文件(ASCII文件): 文件中的内容都是字符, 以ASCII码形式存在文件内. 如: 12345在文本文件中是以 1,2,3,4,55个字符形式存储的二进制文件: 文件中的内容是以数据的二进制形式存储的. 如: 12345在二进制文件中按1个整数类型以二进制形式存储,占4个字节空间13.4.2 文件流类和文件流对象文件流 把外存文件的输入输出看作文件流;输入文件流: 从文件将数据传送到内存中程序,该数据
21、是输入文件流;输出文件流: 从内存中程序将数据传送到文件中,该数据是输出文件流;输入文件流类: ifstream输入文件流对象: ifsream infile;输出文件流类: ofstream输出文件流对象: ofstream outfile;输入输出文件流类: fstream输入输出文件流对象: fstream myfile;C+角度的输入和输出流充当了程序和流源或流目标之间的桥梁;使得C+程序可以以相同的方式对待来自键盘的输入和来自文件的输入;同理,通过使用流,C+程序处理输出的方式将独立于其去向; / 标准I/O的例子#include using namespace std;int ma
22、in() int a,b,c; cinab; c=a+b; cout“c=“c cin - 程序端: 程序中的变量a,b文件端: stdout - cout - 程序端: 程序中的 “c=”,c简单的文件I/O要让程序将数据写入文件,必须:创建一个ofstream对象来管理输出流;将该对象与特定的文件关联起来;以使用cout的方式使用该对象,唯一的区别是:输出将进入文件,而不是屏幕;#include /必须包含的头文件 using namespace std;int main()int a=12 , b=34; ofstream fout; /定义ofstream类对象fout fout.op
23、en(c:c_05temptest.dat, ios:out); /使文件流与test.dat建立关联 foutaendl; foutbendl; fout.close( ); /将输出文件流所关联的磁盘文件关闭 return 0;/例 将int a=12, b=34写到磁盘文件中读取文件#include #include using namespace std;int main( )int x, y; ifstream infile; infile.open(c:c_05temptest.dat, ios:in); infilexy; coutx=xendl; couty=yendl; in
24、file.close( ); return 0;13.4.3 文件的打开与关闭打开磁盘文件(1) 调用文件流对象的成员函数open:文件流对象.open(磁盘文件名, 输入输出方式)ofstream outfile;outfile.open(d:mydoca1.dat, ios:out);(2) 在定义文件流对象时直接初始化ofstream outfile(d:mydoca1.dat, ios:out);文件的输入输出方式设置值ios:in - 打开输入文件ios:out - 打开输出文件,文件不存在时新建, 存在时 删除全部内容,变成空文件(若out方式不与别 的方式组合,等同于trunc方
25、式)ios:app - 打开输出文件, 写入的数据添入文件尾ios:ate - 打开已有文件, 文件指针指向文件尾ios:trunc - 截断文件:若打开文件存在,则文件的内容删 除;若不存在,则新建文件。ios:binary - 二进制文件ios:nocreate - 打开已有文件, 不新建(新版本中取消)ios:in | ios:out - 打开输入输出文件,但不变空文件ios:out | ios:binary - 已二进制方式打开输出文件ios:in | ios:binary - 已二进制方式打开输入文件说明: 新版本的I/O类库中不提供ios:nocreate和ios:noreplac
26、e。 每一个打开的文件都有一个文件指针。 可以用“位或”运算符“|”对输入输出方式进行组合。 如果打开操作失败,open函数的返回值为0(假),如果是用调用构造函数的方式打开文件的,则流对象的值为0。13.4.4 对ASCII文件的操作 如果文件的每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件(或称字符文件)。程序可以从ASCII文件中读入若干个字符,也可以向它输出一些字符。 对ASCII文件的读写操作可以用以下两种方法: (1) 用流插入运算符“”输入输出标准类型的数据。(2) 用本章13.2.3节和13.3.2节中介绍的文件流的put, ge
27、t, geiline等成员函数进行字符的输入输出。例13.8 有一个整型数组,含10个元素,从键盘输入10个整数给数 组,将此数组送到磁盘文件中存放。#include #include using namespace std;int main( )int a10;/定义文件流对象,打开磁盘文件f1.dat ofstream outfile(f1.dat, ios:out); if(!outfile) /如果打开失败,outfile返回 0值 cerropen error! endl; exit(1); coutenter 10 integer numbers:endl; for(int i=0
28、;iai; outfileai ; /向磁盘文件f1.dat输出数据 outfile.close(); /关闭磁盘文件f1.dat return 0; 例13.9 从例13.8建立的数据文件f1.dat中读入10个整数放在数组中,找出并输出10个数中的最大者和它在数组中的序号。#include #include using namespace std;int main( ) int a10,max,i,order; /定义输入文件流对象,以输入方式打开磁盘文件f1.dat ifstream infile(f1.dat,ios:in|ios:nocreate); if (!infile) cer
29、ropen error! endl; exit(1); for(i=0;iai;/从磁盘文件读入10个整数,顺序存放在a数组中 coutai ; /在显示器上顺序显示10个数 coutendl; max=a0; order=0; for(i=1;imax) max=ai; /将当前最大值放在max中 order=i; /将当前最大值的元素序号放在order中 coutmax=maxendlorder=orderendl; infile.close( ); return 0;运行情况如下: 1 3 5 2 4 6 10 8 7 9(在磁盘文件中存放的10个数)max=10 (最大值为10)ord
30、er=6 (最大值是数组中序号为6的元素)从磁盘文件中读入数据,直到文件结束#include #include using namespace std;int main( )int a; ifstream infile; infile.open(f1.dat, ios:in); if(!infile) cerra; if ( infile.good( ) ) / 上述的 infilea 正常输入了数据 couta ; infile.close( ); return 0;从磁盘文件中读入数据存入数组,直到文件结束#include #include using namespace std;int
31、main( )int b1000, n; ifstream infile; infile.open(c:f1.dat, ios:in); if(!infile) cerrbn; if ( infile.good( ) ) / 上述的 infilebn 正常输入了数据 n+ ; for (int i=0; in; i+) coutbi ; infile.close( ); return 0;编一程序将任意文本文件内容读入内存,然后输出到显示器。可以编一个专用函数。#include #include using namespace std;void display_file(char *filen
32、ame) ifstream infile(filename, ios:in); if(!infile) cerropen filename error!endl; exit(1); char ch; while( infile.get(ch) ) / 每次从文件读入1个字符存入ch cout.put(ch); / 在显示器显示ch的字符 coutendl; infile.close( );int main( )display_file(f3.txt); /将f3.txt的入口地址传给形参filename return 0;运行时输出f3.dat中的字符: NEWBEIJINGGREATOLYP
33、ICCHINAint main( ) char fname40; coutfname; / 从键盘输入文件名:f3.txt display_file( fname ); return 0;例13.10 从键盘读入一行字符,把其中的字母字符依次存放在磁盘文件f2.dat中。再把它从磁盘文件读入程序,将其中的小写字母改为大写字母,再存入磁盘文件f3.dat。#include #include using namespace std;/ save_to_file函数从键盘读入一行字符,并将其中的字母存入磁盘文件void save_to_file( ) ofstream outfile(f2.dat)
34、; /定义输出文件流对象outfile,以输出方式打开磁盘文件f2.dat if (!outfile) cerropen f2.dat error!=65 & ci=97 & ci=122) /如果是字母字符 outfile.put(ci); /将字母字符存入磁盘文件f2.dat coutci; /同时送显示器显示coutendl;outfile.close( ); /关闭f2.dat/从磁盘文件f2.dat读入字母字符,将其中的小写字母改为大写字母,再存入f3.datvoid get_from_file() char ch; ifstream infile(f2.dat,ios:in|ios
35、:nocreate); /定义输入文件流outfile,以输入方式打开磁盘文件f2.dat if(!infile) cerropen f2.dat error!endl; exit(1); ofstream outfile(f3.dat); /定义输出文件流outfile,以输出方式打开磁盘文件f3.dat if(!outfile) cerropen f3.dat error!=97 & ch=122) /判断ch是否为小写字母 ch=ch-32; /将小写字母变为大写字母 outfile.put(ch); /将该大写字母存入磁盘文件f3.dat coutch; /同时在显示器输出 coute
36、ndl;infile.close( ); /关闭磁盘文件f2.datoutfile.close(); /关闭磁盘文件f3.dat int main( ) save_to_file( ); /调用save_to_file( ),从键盘读入一行字符并将其中的字母存入磁盘文件f2.dat get_from_file( ); /调用get_from_file(),从f2.dat读入字母字符,改为大写字母,再存入f3.dat return 0;运行情况如下: New Beijing, Great Olypic, 2008, China.NewBeijingGreatOlypicChina (将字母写入磁
37、盘文件f2.dat,同时在屏幕显示)NEWBEIJINGGREATOLYPICCHINA (改为大写字母)13.4.5 对二进制文件的操作 二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件。因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文件。一个长整数100000,在内存中占4个字节,如果按内部格式直接输出,在磁盘文件中占4个字节,如果将它转换为ASCII码形式输出,则要占6个字节 对二进制文件的操作也需要先打开文件,用完后要关闭文件。在打开时要用ios:binary指定为以二进制形式传送和存
38、储。二进制文件除了可以作为输入文件或输出文件外,还可以是既能输入又能输出的文件。这是和ASCII文件不同的地方。输入文件:ifstream infile(stud.dat, ios:in | ios:binary);输出文件:ofstream infile(stud.dat, ios:out | ios:binary);输入输出文件:fstream infile(stud.dat, ios:in | ios:out | ios:binary);1. 用成员函数read和write读写二进制文件对二进制文件的读写主要用fstream类的成员函数read和write来实现。这两个成员函数的原型为r
39、ead(char *buffer, int len);write(const char * buffer, int len);字符指针buffer指向内存中一段存储空间。len是读写的字节数。调用的方式为outfile. write(p1,50);infile. read(p2,30);例13.11 将一批数据以二进制形式存放在磁盘文件中。#include #include using namespace std;struct studentchar name20; int num; int age; char sex;int main( )student stud3=Li , 1001, 1
40、8, f, Fun, 1002, 19, m, Wang,1004, 17, f ; ofstream outfile(stud.dat, ios:out | ios:binary); if(!outfile) cerropen error! endl; abort( ); /退出程序 for(int i=0; i3; i+) outfile.write(char*)&studi, sizeof(studi);outfile.close( );return 0;可以一次输出整个数组到磁盘文件:outfile.write(char*)&stud0, sizeof(stud);用这种方法一次可以输
41、出一批数据,效率较高。在输出的数据之间不必加入空格,在一次输出之后也不必加回车换行符。在以后从该文件读入数据时不是靠空格作为数据的间隔,而是用字节数来控制。例13.12 将刚才以二进制形式存放在磁盘文件中的数据读入内存并在显示器上显示。#include #include using namespace std;struct studentstring name; / 改为 char name20; int num; int age; char sex;int main( )student stud3; int i; ifstream infile(stud.dat, ios:in | ios:
42、binary); if(!infile) cerropen error! endl; abort( ); for(i=0;i3;i+) infile.read(char*)&studi , sizeof(studi); infile.close( ); for(i=0;i3;i+) coutNO. i+1endl; coutname:endl; coutnum:studi.numendl; coutage:studi.ageendl; coutsex:studi.sexendlendl; return 0; 能否一次读入文件中的全部数据,如 infile.read( (ch
43、ar*)&stud0 , sizeof(stud) ); 可以。运行时在显示器上显示:NO.1name: Linum: 1001age: 18sex: fNO.2name: Funnum: 1001age: 19sex: mNO.3name: Wangnum: 1004age: 17sex: f2. 与文件指针有关的流成员函数 在磁盘文件中有一个文件指针,用来指明当前应进行读写的位置。对于二进制文件(文本文件也行),允许对指针进行控制,使它按用户的意图移动到所需的位置,以便在该位置上进行读写。文件流提供一些有关文件指针的成员函数。infile.gcount( ) 返回最新一次输入的字节数如:i
44、nfile.read( &stud, sizeof(stud) );if (infile.gcount( ) sizeof(stud) ) cout“读入数据有误!”; infile.tellg( ) 函数返回输入文件指针的当前位置 (long型整数,以字节为单位,从0算起)infile.seekg( 文件中的位置 );将输入文件的指针移到指定的 位置infile.seekg( 位移量,参照位置 ); 将输入文件指针移到从 参照位置为基础移动若干字节位置Outfile.tellp( ) 返回输出文件指针的当前位置Outfile.seekp( 文件中的位置 )Outfile.seekp( 位移量
45、,参照位置 )infile.seekg( 位移量,参照位置 ); 将输入文件指针移到从 参照位置为基础移动若干字节位置Outfile.seekp( 位移量,参照位置 );将输出文件指针移到从 参照位置为基础移动若干字节位置参照位置:ios:beg 文件开头begin(默认值) ios:cur 指针当前位置current ios:end 文件末尾(已超出文件尾)如: infile.seekg(100); 输入文件指针移到文件第101字节 处。第1个字符的位置是0 infile.seekg(-50, ios:cur );从当前位置回移50个字节值得注意的是: 当文件对象发生操作异常(指针已在文件尾
46、,还要读数据,则eof发生;打开文件失败;)时,其之后的相关操作都会失效。因此,要用clear( )函数将其错误状态清除,使得其后的操作有效。 fin.seekg(0 , ios:beg); cout“begin=”fin.tellg()endl; / 显示 0 fin.seekg(0,ios:end); fin.get(); / 在文件尾还要读数据,eof出现。fin状态异常 coutend=fin.tellg( )eof( )=fin.eof()endl;/ 显示:end= -1 eof( )=1 fin.seekg(0,ios:beg); / 由于fin状态异常,seekg不起作用cou
47、t“begin=”fin.tellg()endl; / 显示:begin= -1值得注意的是: 当文件对象发生操作异常(指针已在文件尾,还要读数据,则eof发生;打开文件失败;)时,其之后的相关操作都会失效。因此,要用clear( )函数将其错误状态清除,使得其后的操作有效。 fin.seekg(0,ios:beg); cout“begin=”fin.tellg()endl; / 显示 0 fin.seekg(0,ios:end); fin.get(); / 在文件尾还要读数据,eof出现。fin状态异常 coutend=fin.tellg( )eof( )=fin.eof()endl;/ 显示:end= -1 eof( )=1fin.clear( ); / 将fin的异常状态清除 fin.seekg(0,ios:beg); / seekg起作用,指针移到文件头cout“begin=”fin.tellg( )endl; / 显示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年各工种安全教育培训试卷及答案
- 2025年区块链技术在供应链金融风控中的风险评估报告
- 2026年上海松江区九亭第二中学教师招聘笔试备考题库及答案解析
- 2025黑龙江双鸭山市本级招聘普通公益性岗位人员59人笔试模拟试题及答案解析
- 工程维修质量保证承诺书范文
- 2025年下半年云南财经大学招聘20人考试备考题库及答案解析
- 市政给水管道施工合同范本解析
- 制造业智能仓库管理系统应用报告
- IT项目管理流程标准与实际应用
- 幼儿自理能力培养实践总结
- 计算思维与人工智能 课件 第8章 智能图像处理
- 2025年全屋定制合同协议装修材料品牌选择指南
- 探索丝绸之路课件
- 2025秋季国开《经济学(本)》期末考试题库及答案
- (新教材)2026年人教版八年级下册数学 24.3 数据的四分位数 课件
- 戥秤的课件教学课件
- 砂石赠与合同范本
- 五常管理餐饮培训
- (12)普通高中技术与工程课程标准日常修订版(2017年版2025年修订)
- 2025年仲钨酸铵行业分析报告及未来发展趋势预测
- 【正版授权】 ISO 11154:2023/Amd 1:2025 EN Road vehicles - Roof load carriers - Amendment 1
评论
0/150
提交评论