1、1,第十二章 文件,2,编译系统已经以函数的形式做好了对标准外设(键盘、屏幕、打印机、文件)的接口,使用时只需按照要求的格式调用即可。,scanf(“%d“,3,文件:存储在外部介质上数据的集合。,程序,键盘,屏幕,程序,文件,文件,文件有两种形式: ASCII文件(文本文件):每字节代表一个字符。 二进制文件:按内存中数据的存放方式。,4,文件,文本文件:,以ASCII表示的文件:记事本,*.cpp等,二进制文件:,用二进制形式表示的文件:可执行程序*.EXE等,56:ASCII表示为 00110101 00110110,占两字节,56:二进制表示为 111000,占六个二进制位,不同的文件
2、操作的函数、格式不同,5,C文件是一个字节流或二进制流,对文件的存储是以字节为单位的。,缓冲文件系统:,系统自动在内存为正在处理的文件开辟缓冲区,对文件的输入输出操作通过缓冲区进行。,非缓冲文件系统:系统不为文件开辟缓冲区,缓冲区由每个文件自己开辟。,6,文件类型指针,每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(文件的名字、文件的状态及当前位置等)。这些信息保存在一个结构体类型的变量中的。该结构体类型是由系统定义的,名为FILE。,typedef struct int -fd; /* 文件号 */int -cleft ; /* 缓冲区中剩下的字符 */int -mode; /
3、* 文件操作模式 */char *-nextc; /* 下一个字符的位置 */char *-buff; /* 文件缓冲区位置 */ FILE;,7,可以定义文件型指针变量,FILE *fp;,fp是一个指向FILE类型结构体的指针变量。可以使fp指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。通过文件指针变量能够找到与它相关的文件。,如果有n个文件,一般应设n个指针变量,使它们分别指向n个文件,以实现对文件的访问。,8,文件的打开与关闭,1、文件的打开(fopen),FILE *fp; fp=fopen(文件名,使用文件方式);,fp=fopen(“A1.C”, “
4、r“);,使用与文件有关的函数必须有:#include “stdio.h”,9,程序,文件,文件,r、w是针对内存而言,用“ r ”方式打开的文件应事先存在,不能用“r”打开一个并不存在的文件。,用“w”打开一个原来不存在的文件,系统先建立此文件,然后再向其输入数据。若打开一个已存在的文件,则打开时将其原来的内容删除,再向其输入数据。,如果希望向一个已经存在的文件的尾部添加新数据,保留原有的数据,用“a”方式打开,但文件必须事先存在,打开文件时,文件的位置指针在文件尾部。,10,用“r+”, “w+”, “a+”方式打开的文件可以输入输出数据。,用“ r+ ”方式打开的文件应事先存在,以便计算
5、机从中读出数据。,用“w+”方式一样建立一个新文件,向其输入数据,然后可以读取该文件的数据。若打开一个已存在的文件,一样删除其原有的内容。,用“a+”方式打开已有的文件,打开文件时,文件的位置指针在文件尾部,此时可以进行追加或读操作。,11,如果是二进制文件,则在方式后加“b”。,如果不能正确完成文件的打开操作,函数fopen将返回错误信息,即返回空指针值NULL。,if ( (fp=fopen (“file1.C”, “r” ) )= =NULL) printf(“cannot open this filen”);exit(0); ,文本文件,内存,将回车换行符转换成换行符,文本文件,内存,
6、将换行符转换成回车换行符,二进制文件不进行这种转换,12,系统定义的三个标准文件指针:,stdin: 标准输入文件(键盘) stdout: 标准输出文件(显示器) stderr: 标准错误输出文件(显示器),这些设备文件由系统控制,自动打开和关闭,直接使用,无需进行说明。,13,2、文件的关闭 fclose,文件使用完毕后,应当关闭。关闭就意味着释放文件指针以供别的程序使用,同时也释放文件缓冲区的内存,避免文件中数据的丢失,使指针与文件脱钩。,fclose (文件指针),flose 亦有返回值,正常关闭返回值为0,否则为非0。关闭是否出错可由ferror函数来检验。,fclose (fp),1
7、4,文件的读写,程序,文件,文件,1、fputc 把一个字符写到文件中,fputc(ch, fp);,ch为要输出的字符(常量或变量)。fp:要写入的文件。,fp=fopen(“FILE1.OUT”, “w”); fputc(A, fp); /* 将字符A写入FILE1.OUT */,15,2、fgetc 从指定文件中向程序中的变量读入一个字符,ch=fgetc(fp);,fp:输入文件的指针; ch:程序中的字符变量,在程序中预先定义。,如果在执行fgetc( )读字符时遇到文件结束符,函数返回一个文件结束标志EOF。,16,将一个磁盘文件中的字符读出到屏幕上显示,#include “std
8、io.h” main( ) FILE *fp;char ch;if(fp=fopen(“file1.c”, “r”)= =NULL) printf(“cannot open ”); exit(0); ch=fgetc(fp);while(ch!=EOF) putchar(ch);ch=fgetc(fp);putchar(n);fclose(fp); ,打开文件file1.c读其内容,读文件中的一个字符到ch,判断文件是否结束,关闭文件,ch=getchar( ); while (ch!=n) . ,判断键盘输入是否结束,17,while(!feof(fp) ch=fgetc(fp);. ,当f
9、eop(fp)的值为1时文件结束,用此可以判断文本文件和二进制文件是否结束。,EOF为文本文件的结束标志,-1。,18,从键盘输入一些字符,把它们送入磁盘文件file1.out中去,直到输入一个#为止。,#include “stdio.h” main( ) FILE *fp;char ch;if(fp=fopen(“file1.out”, “w”)= =NULL) printf(“errorn”); exit(0); ch=getchar( );while(ch!=#) fputc(ch, fp);ch=getchar( );fclose(fp); ,打开文件file1.out输入数据,从键盘
10、读入一个字符到ch,判断输入是否结束,关闭文件,向文件输出字符,19,fread函数和fwrite函数,用fread和fwrite可以一次读写一个若干长度的数据块,fread(内存地址,长度,次数,文件指针);,fwrite(内存地址,长度,次数,文件指针);,int a10; fread ( a, sizeof(int), 10, fp); fwrite( a, sizeof(int), 10, fp);,float x; fread ( ,20,若有以下的定义和说明,#include”stdio.h” struct std char num6;char name8;float mark4;
11、 a30; FILE *fp;,设文件中以二进制形式存有10个班的学生数据, 且已正确打开,文件指针定位于文件开头,若要从文件中读30个学生的数据放入ss数组中,以下不能实现此功能的语句是,for (i=0;i30;i+)fread(,B) for (i=0;i30;i+,i+)fread(a+i, sizeof(struct std), 1L, fp);,C) fread(a, sizeof(struct std), 30L, fp);,D) for (i=0;i30;i+)fread( ai, sizeof(struct std), 1L, fp);,21,若有以下结构体类型,#inclu
12、de”stdio.h” struct st char name8;int num;float s4; student50;,并且结构体数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,以下不正确的形式是:,fwrite(student, sizeof(struct st), 50, fp);,B) fwrite(student, 50*sizeof(struct st), 1, fp);,C) fwrite(student, 25*sizeof(struct st), 25, fp);,D) for (i=0;i50;i+)fwrite( student+i, sizeof
13、(struct st), 1, fp);,22,下面程序从一个二进制文件中读入结构体数据,并把结构体数据显示在终端屏幕上。,#include “stdio.h” struct rec int num;float total; ; main( ) FILE *f;f=fopen( “bin.dat”, “rb”);reout(f);fclose(f); ,reout(_) struct rec r;while (!feof(f) fread( ,FILE *f,sizeof(rec),r.num, r.total,23,fprint 和 fscanf 函数,是格式化的读写函数,与printf和s
14、canf相仿,但其读写对象不是终端而是磁盘文件。,fprintf(文件指针,格式字符串,输出列表);,fscanf(文件指针,格式字符串,输入列表);,fprintf(fp , “%d, %f n”, i, t );,fscanf(fp, “%d, %f ”, ,24,写程序对10个数进行排序,并将结果输出到文件FILE1.OUT中去。,#include”stdio.h” main( ) int a10,i,j,t;FILE *fp;if(fp=fopen(“FILE.OUT”, “w”)= =NULL) printf(“cannot open n”); exit(0); for(i=0;i1
15、0;i+) scanf(“%d”, ,for(i=0;iaj+1) t=aj;aj=aj+1;aj+1=t;for(i=0;i10;i+)fprintf(fp, “%5d”, ai); fprintf(fp, “n”); fclose(fp); ,25,文件的定位,文件中有个位置指针,指向当前读写的位置。如果顺序读写一个文件,每次读写一个字符,则读写完一个字符后,该位置指针自动移动指向下一个字符位置。如果想改变这样的规律,则利用函数强制使位置指针指向其它指定的位置。,rewind函数,rewind函数的作用是使位置指针重新返回文件的开头,此函数没有返回值。,26,有一个磁盘文件,第一次使它显示
16、在屏幕上,第二次把它复制到另一个文件上。,# include “stdio.h” main( ) FILE *fp1, *fp2;fp1=fopen(“file1.c”, “r”);fp2=fopen(“file2.c”, “w”);while (!feof(fp1) putchar(getc (fp1); rewind(fp1);while (!feof(fp1) putc (getc (fp1),fp2); fclose(fp1); fclose(fp2); ,27,fseek函数和随机读写,对流式文件可以进行顺序读写,也可以进行随机读写。关键在于控制文件的位置指针,如果位置指针是按字节位
17、置顺序移动的,也就是顺序读写。如果可以将位置指针按需要移动到任意位置,就可以实现随机读写。,随机读写:是指读写完上一个字符后,并不一定要读写其后续的字符,而可以读写文件中任意位置的字符。,fseek(文件类型指针,位移量,起始点),位移量:指以起始点为基点,向前移动的字节数,用long型表示。,fseek 用于二进制文件,可以准确计数。,28,fseek(文件类型指针,位移量,起始点),fseek( fp, 100L, 0);,将位置指针移到离文件头100个字节处,fseek( fp, 50L, 1);,将位置指针移到离当前位置50个字节处,fseek( fp, -10L, 2);,将位置指针
18、从文件末尾处向后退10个字节,29,在磁盘文件上存有10个学生的数据,要求将第1、3、5、7、9个学生数据输入计算机,并在屏幕上显示出来。,#include “stdio.h” struct student char name10;int num;int age; stud10; main() int i;FILE *fp;if (fp=fopen(“stud”,”rb”)= =NULL) printf(“errorn”); exit(0); ,for(i=0;i10;i+=2) fseek(fp, i*sizeof(struct student),0);fread( ,30,ftell 函数
19、,得到流式文件中的当前位置,用相对于文件开头的位移量来表示。 若函数返回-1,则表示出错。,i=ftell(fp); if (i= =-1L) printf(“errorn”);,long i; fseek(fp, 0L, 2); i=ftell(fp);,31,出错的检测,ferror 函数,ferror(fp);,如果函数的返回值为0,表示未出错,如果返回一个非0值,则表示出错。,对同一个文件每一次调用输入输出函数,均会产生一个新的ferror函数值,因此,应当在调用一个输入输出函数后立即检查ferror函数的值,否则信息会丢失。,32,clearerr 函数,使文件错误标志和文件结束标志
20、置为0。在调用一个输入输出函数时出现错误,ferror函数值为一个非0值,在调用clearerr(fp)后,ferror(fp)的值变成0。,只要出现错误标志,就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何一个输入输出函数。,33,下面程序由终端键盘输入字符,存放到文件中,用!结束输入。,#include “stdio.h” main( ) FILE *fp; char ch, fname10; printf(“Input name of filen”); gets(fname); if (fp=fopen(fname, “w”)= =NULL) printf(“
21、errorn”); exit(0); printf(“Input datan”); while (_!=!)fputc(_); fclose(fp); ,(ch=getchar( ),ch , fp,34,假设磁盘上有三个文本文件,其文件名和内容分别为:,磁盘上还有以下C语言源程序,经编译、连接后生成可执行文件,文件名为 ex12.exe,#include”stdio.h” main( int argc, char *argv) FILE *fp;void sub( );int i=1;while (-argc0)if (fp=fopen(argvi+,”r”)= =NULL) printf(
22、“errorn”); exit(0); else sub(fp); fclose(fp); ,void sub(FILE *fp) char c;while(c=getc(fp)!=!)putchar(c+1); ,若在DOS提示符下键入: ex12 f1 f2 f3 则程序的运行结果是什么?,bbbcccddd,35,输入输出流(I/O Stream) C+语言的I/O系统向用户提供一个统一的接口,使得程序的设计尽量与所访问的具体设备无关,在用户与设备之间提供了一个抽象的界面:输入输出流。,36,用标准流进行输入/输出时,系统自动地完成数据类型的转换。对于输入流,要将输入的字符序列形式的数据
23、变换成计算机内部形式的数据(二进制或ASCII)后,再赋给变量,变换后的格式由变量的类型确定。对于输出流,将要输出的数据变换成字符串形式后,送到输出流(文件)中。,37,重载输入(提取)和输出(插入)运算符,class A float x, y; public:A(float a=0, float b=0) x=a; y=b; void Set(float a, float b) x=a; y=b; void Show(void) coutxtyendl; ; void main(void) A a(2,3);a.Set(20 , 30);a.Show( ); ,输入对象数据,输出对象数据,c
24、ina;,couta;,对象不能直接输入输出,38,在C+中允许用户重载运算符“”,实现对象的输入和输出。重载这二个运算符时,在对象所在的类中,将重载这二个运算符的函数说明该类的友元函数。,重载提取运算符的一般格式为:,友元函数,friend istream ,返回值类型,函数名,左操作数,右操作数,cina;,operator(cin, a),39,友元函数,friend istream ,返回值类型,函数名,左操作数,右操作数,cina;,operator(cin, a),返回值类型:类istream的引用,cin中可以连续使用运算符“”。,cinab;,第一个参数:是“”的左操作数cin
25、类型,类istream的引用,第二个参数:是“”的右操作数,即欲输入的对象的引用.,istream ,40,class A float x, y;public:.;. A a;cina;,friend istream ,istream ,重新定义输入流,在类中原型说明,在类外定义函数,返回输入流,41,class incountint c1,c2; public:incount(int a=0,int b=0) c1=a; c2=b; void show(void)cout(istream ,重载输入函数原型说明,重载输入函数定义,42,友元函数,friend ostream ,返回值类型,函
26、数名,左操作数,右操作数,couta;,operator(cout, a),重载输出(插入)运算符的一般格式为:,与输入(提取)运算符比较:,friend istream ,将输入流改为输出流。,43,class A float x, y;public:.;. A a(2,3);couta;,friend ostream ,ostream ,重新定义输出流,在类中原型说明,在类外定义函数,返回输出流,44,class incountint c1,c2; public: incount(int a=0,int b=0) c1=a; c2=b; void show(void) cout(istre
27、am ,重载输出函数原型说明,重载输出函数定义,45,编译系统已经以运算符或函数的形式做好了对标准外设(键盘、屏幕、打印机、文件)的接口,使用时只需按照要求的格式调用即可。,cinx; coutx;,cin.get(ch);,46,文件流 C+在头文件fstream.h中定义了C+的文件流类体系 ,当程序中使用文件时,要包含头文件fstream.h 。,当使用文件时,在程序头有:#include 其中定义了各种文件操作运算符及函数。,47,程序对文本文件的操作与对键盘、显示器的操作比较:,在涉及文本文件的操作时,将输入文件看成键盘,将输出文件看成显示器,格式不变。只需在程序中增加打开与关闭文件
28、的语句。,48,文件的操作,文件,文本文件:,以ASCII表示的文件:记事本,*.cpp等,二进制文件:,用二进制形式表示的文件:可执行程序*.EXE等,56:ASCII表示为 00110101 00110110,占两字节,56:二进制表示为 111000,占六个二进制位,不同的文件操作的函数、格式不同,49,文本文件的打开与关闭 在文件操作前,需要将程序与被操作的文件联系起来,使程序可以“引用”文件。,在程序内定义一个文件类的对象,由该对象与文件发生联系,程序内所有的与文件的操作都是对该对象的操作。,fstream infile , outfile; ifstream infile; ofs
29、tream outfile;,两个对象,可以联系两个输入输出文件,对象只能联系输入文件,对象只能联系输出文件,50,定义用于输入的文件对象,定义用于输出的文件对象,定义用于输入输出的文件对象,51,如何使文件类的对象与欲操作的文件发生联系?,用对象打开文件:,ifstream infile; /定义输入文件类对象 infile.open(“myfile1.txt”);/利用函数打开某一文件,打开文件的作用是,使文件流对象与要使用的文件名之间建立联系。,ofstream outfile; /定义输出文件类对象 outfile.open(“myfile1.txt”);/打开某一文件供输出,52,i
30、nfile.open(“myfile1.txt”);,打开文件“myfile1.txt”用于输入,并将这个文件与输入文件类对象infile建立联系,今后,在程序中,用到这个文件“myfile1.txt”的地方就用infile来代替。,outfile.open(“myfile2.txt”);,打开文件“myfile2.txt”用于输出,并将这个文件与输出文件类对象outfile建立联系,今后,在程序中,用到这个文件“myfile2.txt”的地方就用outfile来代替。,53,如何从文件中输入输出数据?,将文件类对象看成键盘和显示器即可。,ifstream infile; /定义输入文件类对象
31、 infile.open(“myfile1.txt”);/利用函数打开某一文件 float x , y; infilexy;,myfile1.txt,3 4,内存,infile,x,y,3,4,用infile代替myfile1.txt进行操作。,54,ifstream outfile; /定义输出文件类对象 infile.open(“myfile2.txt”);/利用函数打开某一文件float x3 , y4; outfilextyendl;,myfile2.txt,内存,outfile,x,y,3,4,用outfile代替myfile2.txt进行操作。,3,4,55,4)用完文件后,使用成
32、员函数关闭文件.如:,myfile1.txt,3 4,内存,infile,x,y,3,4,myfile2.txt,outfile,3,4,ifstream infile; ofstream outfile infile.open(“myfile1.txt”); outfile.open(“myfile2.txt”); float x,y; infilexy; outfilextyendl; infile.close(); outfile.close();,infile.close(); outfile.close();,56,void main(void) int a10;ifstream i
33、nfile; /定义输入文件类ofstream outfile; /定义输出文件类infile.open(“file1.txt”); /打开一个输入文件“file1.txt”outfile.open(“file2.txt”); /打开一个输出文件“file2.out”for(int i=0;iai;/将“file1.txt”中的十个整型数输入到ai中for(i=0;i10;i+)outfileait;/将ai中的十个数输出到文件“file2.txt”中outfileendl;infile.close();/关闭输入文件outfile.close();/关闭输出文件 ,输入文件“file1.tx
34、t”必须存在,且在其中有十个整数,57,当用类fstream定义文件对象时,该对象即能定义输入文件对象,又能定义输出文件对象,所以打开文件时,必须在成员函数open()中的参数中给出打开方式(读或写)。,fstream pfile1,pfile2;/定义了两个文件类的对象 pfile1.open(“file1.txt”, ios:in);/pfile1联系到“file1.txt”,用于输入 pfile2.open(“file2.txt”, ios:out);/pfile2联系到“file2.txt”,用于输出 char ch; pfile1ch; /输入 pfile2ch; /输出 pfile
35、1.close(); pfile2.close();,58,在打开文件后,都要判断打开是否成功。若打开成功,则文件流对象值为非零值;若打开不成功,则其值为0。,ifstream pfile1,pfile2;/定义了两个文件类的对象 pfile1.open(“file1.txt”, ios:in); pfile2.open(“file2.txt”, ios:out); if (!pfile1)cout ”不能打开输入文件:file1.txt”n; exit(1); if (!pfile2)cout ”不能打开输出文件:file2.txt”n; exit(1);,若为0,打开文件操作失败,59,打
36、开输入文件时,文件必须存在。 打开输出文件时,若文件不存在,则建立文件;若文件存在,则删除原文件的内容,使其成为一个空文件。,60,char ch, str300; ifstream infile(“myfile1.txt”); ofstream outfile(“myfiel2.txt”);,涉及到字符串的文件读写,从键盘输入一个字符:cin.get(ch);,从文件输入一个字符:infile.get(ch);,向显示器输出一个字符:cout.put(ch);,向文件输出一个字符:outfile.put(ch);,从键盘输入一行字符:cin.getline(str,300);,从文件输入一行
37、字符:infile.getline(ch,300);,从文件输入一字符或一行字符,当输入至文件尾时,函数返回值为0,可以据此来判断循环结束。,61,14-15. 实现两文件的拷贝的程序,void main(void) char filename1256,filename2256;coutfilename1;coutfilename2;ifstream infile(filename1);ofstream outfile(filename2);char ch;while(infile.get(ch)outfile.put(ch);infile.close();outfile.close(); ,
38、输入文件(源文件)名,输出文件(目的文件)名,用构造函数打开文件,从源文件中读取一个字符,至文件尾停止循环,将该字符输出至目的文件,关闭文件,62,void main(void) char filename1256,filename2256;char buf300;coutfilename1;coutfilename2;fstream infile,outfile;infile.open(filename1,ios:in);outfile.open(filename2,ios:out);while(infile.getline(buf,300)outfilebufendl;outfile.cl
39、ose();infile.close(); ,输入文件(源文件)名,输出文件(目的文件)名,用函数打开文件,从源文件中读取一行字符,至文件尾停止循环,将该行字符输出至目的文件,关闭文件,63,二进制文件的读写操作,若在文件的打开方式中没有特别说明,打开的文件均为ASCII码文件,若要打开二进制文件,则要特别说明并用特定的读写函数。,fstream infile,outfile; infile.open(“inf1.dat”, ios:in| ios:binary);,outfile.open(“outf1.dat”, ios:out| ios:binary);,文件名,输入方式打开,二进制文件
40、,文件名,输出方式打开,二进制文件,64,输入函数: infile.read( char *, int ),输入文件对象名,数据进入的内存地址,一次读入的字节数,文件,内存,int a10; infile.read(char *)a, 10*sizeof(int);/从文件中输入十个整型数到a,int i; infile.read(char *)/从文件中输入一个整型数到i,由于二进制文件中的数据不是ASCII码,故不能直接对其读写,必须要通过特定的函数予以转换。,读入,地址要强制转换成字符型,65,输出函数: outfile.write( char *, int ),输出文件对象名,要输出的
41、数据在内存中的地址,一次输出的字节数,文件,内存,int a10=0,1,2,3,4,5,6,7,8,9; outfile.write(char *)a, 10*sizeof(int);/向文件输出一个整型数组a,int i=4; outfile.write(char *)/向文件输出一个整型数i,写出,地址要强制转换成字符型,66,判断二进制文件是否读到文件尾?,infile.eof( ) 当到达文件结束位置时,该函数返回一个非零值;否则返回零。,fstream infile; infile.open(“data1.dat”,ios:in|ios:binary); if(!infile) c
42、out“Open Error!n”; exit(1); char str300; while(!infile.eof()infile.read(str, 300);,判断打开是否出错,判断是否读到文件尾,67,void main(void ) char filename1256,filename2256; char buff4096; cout filename1; cout filename2; fstream infile,outfile; infile.open(filename1,ios:in | ios:binary); outfile.open(filename2,ios:out
43、| ios:binary); int n; while (!infile.eof() /文件不结束,继续循环infile.read(buff,4096); /一次读4096个字节n=infile.gcount(); /取实际读的字节数outfile.write(buff,n); /按实际读的字节数写入文件 infile.close(); outfile.close(); ,68,文件指针,文件内容,文件指针,当一打开文件,文件指针位于文件头,并随着读写字节数的多少顺序移动。,可以利用成员函数随机移动文件指针。,69,随机读取二进制文件,infile.seekg(int);/将文件指针移动到由参
44、数指定的字节处,infile.seekg(100);/将文件指针移动到距离文件头100个字节处,infile.seekg(int, ios:_dir);,移动的字节数,相对位置,infile.seekg(100, ios:beg);/移动到距文件头100个字节,_dir: beg: 文件头cur: 当前位置end: 文件尾,infile.seekg(-100, ios:cur);/移动到距当前位置前100个字节,infile.seekg(-500, ios:end);/移动到距文件尾前500个字节,70,void main(void ) ofstream outfile(“data1.dat”
45、,ios:out| ios:binary); int i;for(i=5;i 1000;i+=2 )outfile.write(char*) ,以读的方式打开原文件,71,设在缺省目录下有文件file1.txt,文件中内容为: 1 2 3 4 5 6 执行下述程序后,程序的输出是_。 void main(void) fstream f1;int tmp, sum=0;f1.open(“file1.txt”,ios:in);while(f1tmp)sum+=tmp;f1.close( );coutsumendl; ,72,答疑时间: 假设20日考试,18、19日晚6:00在 IV-A203 答疑。,73,如果令A,B,C,D,,X,Y,Z这26个英文字母,分别等于百分之1,2,24,25,26个数值,那么我们就能得出如下有趣的结论: HARD WORD 8+1+18+4+23+15+18+11=98 KNOWLEDGE 96% LOVE 54% LUCK 47% 计算一下MONEY STUDY ATTITUDE,