第10章 及其应用

上传人:痛*** 文档编号:243882996 上传时间:2024-10-01 格式:PPT 页数:59 大小:370.50KB
返回 下载 相关 举报
第10章 及其应用_第1页
第1页 / 共59页
第10章 及其应用_第2页
第2页 / 共59页
第10章 及其应用_第3页
第3页 / 共59页
点击查看更多>>
资源描述
,*,36,单击此处编辑母版文本样式,第,10,章 文件及其应用,第,10,章 文件及其应用,学习目标,掌握文件的基本概念,文件的读写操作。,学习内容,文件的概念及分类,文件指针,文本文件的打开、读写及关闭操作,二进制文件的打开、读写及关闭操作。,下一页,返 回,第,10,章 文件及其应用,10.1,文件的概念,10.2,文件的基本操作,10.3,文件应用实例,10.4,本章小结,10.5,实训,上一页,返 回,10.1,文件的概念,10.1.1,文件概念及文件类型,1.,文件的概念,在前面章节的程序中,数据的输入和输出都是通过键盘和显示器进行。一般来说,键盘和显示器适合处理少量数据和信息的输入和输出,它方便快捷,是常用的输入输出设备。但是如果要进行大量数据的加工处理,键盘和显示器的局限性就很明显了。通常的做法是利用磁盘作为数据的存放中介,程序中先通过键盘或其他输入设备将数据写入磁盘,然后对存放在磁盘中的数据进行加工,加工后的数据仍然存放到磁盘上,其过程如,图,10-1,所示。,数据在磁盘上是以文件的形式存放的。文件是计算机中一个很重要的概念,所谓文件是指存储在磁盘等外部介质上的一批数据的集合,这里的一批数据可以是一批实验数据或者一篇文章、一幅图片、甚至一段程序等等,利用外部介质的存储特性,数据可以长久地保存并可用介质携带。,下一页,返 回,10.1,文件的概念,2.,文件的类型,从不同角度可以将文件划分成不同的类别。在,C,语言中经常用到的有,3,种划分:,(1),按文件存储的内容,文件可分为源程序文件和数据文件。,源程序文件存放的是程序代码,数据文件是程序中的数据集合。本章所介绍的文件操作很大程度上是针对数据文件而言。,(2),按文件中数据的组织方式,文件可分为文本文件和二进制文件。,文本文件(也称为,ASCII,文件)是指文件中的每个字符以其,ASCII,码的形式存储在文件中,文件中的每个字符占,1,个字节。例如,整型数据,5678,在内存中占,2,个字节,而如果以文本文件的形式存储则占,4,个字节。实型数据,3.1415,在内存中占,4,个字节,而如果以文本文件的形式存储则占,6,个字节,其中小数点也占,1,个字节。所以将文本文件中的数据读入内存处理时,需要将其从文件中数据的存储形式转换为内存中的存储形式。,下一页,返 回,上一页,10.1,文件的概念,二进制文件是指将数据以其在内存中存放的形式存储到文件中。整型数据在内存中占,2,个字节,如果将整型数据存储到二进制文件中,该数据还占,2,个字节。实型数据在内存中占,4,个字节,而如果将该数据存储到二进制文件中,该数据还占,4,个字节,所以将二进制文件中的数据读入内存处理时,不需要中间转换。由此可见,二进制文件节省存储空间而且存取速度比文本文件的存取速度快。,(3),按文件存取方式,文件可分为顺序文件和随机文件。,顺序文件顾名思义总是从文件的开头顺序读或者写,即就是按照文件的字节顺序进行,而随机文件可以指定读或者写的位置,并对该位置上的数据直接进行读或写操作。,提示:对文件操作时,需要了解读和写的概念。将文件中的数据调入内存的过程称为读操作,而将内存中的数据存放到磁盘文件的过程称为写操作。,下一页,返 回,上一页,10.1,文件的概念,10.1.2,文件指针,在对文件进行打开、读写及关闭操作时,需要借助文件指针来完成。,文件指针是指向结构体类型的指针,该结构体类型由系统定义,取名为,FILE,,其中存放着文件的名字、文件的状态、文件的大小以及文件的位置等信息。程序中可以用,FILE,类型定义指针变量,以指向文件,定义的一般形式为:,FILE *,指针变量,;,例如:,FILE *,fp,;,fp,是指向,FILE,结构体类型的变量,该变量可以用来存放某个文件的信息,因此称为文件指针。文件的访问必须通过文件指针完成,定义文件指针时必须包含头文件“,stdio.h,”,。,返 回,上一页,10.2,文件的基本操作,文件操作通常遵循打开文件、对文件进行读或写、关闭文件的步骤进行。,10.2.1,文件的打开与关闭,1.,文件的打开,在对文件进行读写操作之前,必须先打开文件并使文件指针指向文件,即建立文件指针与文件之间的关联,以便后面通过文件指针对文件进行操作。,文件打开操作使用库函数,fopen,( ),完成,该函数的一般使用形式为:,文件指针,=,fopen,(,文件名,文件使用方式,),;,例如:,FILE *,fp,;,fp,=,fopen(“d:aa.txt”,”w,”);,下一页,返 回,10.2,文件的基本操作,函数说明:,(1),文件名指出要打开文件的路径和文件的名称。,(2),文件使用方式指出文件打开后的使用方式,比如读文件或写文件等操作。,文件使用方式有多种,如,表,10-1,所示。,如果文件打开成功,那么就可以使用文件指针对文件进行操作,而如果文件打开失败,那么文件指针的值为,NULL,。通常用下面的代码打开并判断文件打开是否成功:,FILE *,fp,;,fp,=,fopen(“d:aa.txt”,”w,”);,if (,fp,=NULL) ,printf(“can,not open the file.n”);,exit(0); /*,结束程序执行,退出*,/,下一页,返 回,上一页,10.2,文件的基本操作,2.,文件的关闭,文件的读写操作完成后,必须关闭文件,否则文件中的数据可能会丢失。关闭文件实际上是切断文件指针与文件的联系。,文件关闭操作使用库函数,fclose,(),完成,它的一般调用形式为:,fclose,(,文件指针,),;,例如:,fclose(fp,);,关闭,fp,指向的文件。文件正常关闭时,函数,fclose,(),返回值为,0,,否则返回值为非,0,值,这时表示有错误发生。,下一页,返 回,上一页,10.2,文件的基本操作,10.2.2,文本文件的读写,文本文件的读写操作,必须按文件中字符的先后顺序进行,即只能在操作了第,i,个字符之后,才能操作第,i+1,个字符。在对文件操作时,文件的读写指针由系统自动向后移动。,语言提供了多种文本文件的读写函数:字符读写函数、字符串读写函数以及格式化读写函数等。,1.,字符读写函数(,fputc,(),和,fgetc,(),),(1),字符写函数,fputc,(),函数,fputc,(),的功能是把一个字符写入指定的文件中,该函数常用的调用形式为:,fputc,(,ch,fp,),;,其中,,ch,为需要写入的字符,可以是字符常量或字符变量。,fp,为文件指针并且所指向的文件必须是以写或读写方式打开。,下一页,返 回,上一页,10.2,文件的基本操作,例如:,fputc(a,fp,);,是把字符,a,写入,fp,所指向的文件中。,(2),字符读函数,fgetc,(),函数,fgetc,(),的功能是从指定的文件中读取一个字符,该函数常用的调用形式为:,ch,=,fgetc(fp,),;,从,fp,所指的文件中读取一个字符并存入字符变量,ch,中,读取的文件必须是以读或读写方式打开的。,提示:函数字符读写函数只能读写单个字符,如果要读取或写入整个文件内容,需要循环语句配合。,下一页,返 回,上一页,10.2,文件的基本操作,【,例,10-1】,把从键盘输入的一行字符写入文本文件,再把该文件内容读出显示在屏幕上。,【,程序代码,】,#include ,stdio.h,main(),FILE *,fp,;,char,ch,;,if (,fp,=,fopen(str.txt,w,+)=NULL) /*,打开文件*,/,printf,(,文件不能打开,!);,exit(0);,下一页,返 回,上一页,10.2,文件的基本操作,printf,(,请输入文本文件的内容,:n);,ch,=,getchar,();,while (,ch,!=n) /*,该循环把输入的内容写入文件*,/,fputc(ch,fp,);,ch,=,getchar,();,printf,(,文本文件的内容为,:n);,rewind(fp,); /*,把文件读写位置定位在文件开头*,/,ch,=,fgetc(fp,); /*,从文件中读取第,1,个字符*,/,while (,ch,!=EOF) /*,该循环读取整个文件内容*,/,下一页,返 回,上一页,10.2,文件的基本操作,putchar(ch,);,ch,=,fgetc(fp,);,printf(n,);,fclose(fp,); /*,关闭文件*,/,执行程序时,输入“,This is a text file.”,,,程序运行结果为:,下一页,返 回,上一页,10.2,文件的基本操作,程序说明:,(1) EOF,是系统定义的文本文件结束标志,其值为,-1,,当文件读取遇到,EOF,时,说明文件读取完毕。,(2),本例同时会在磁盘上生成一个名为“,str.txt,”,的文本文件,其内容与屏幕输出的结果一致,该文件可在,Windows,环境下打开查看内容。文件“,str.txt,”,与源程序文件路径相同。,2.,字符串读写函数(,fputs,(),和,fgets,(),),(1),字符串写函数,fputs,(),fputs,(),函数的功能是向指定的文件中写入一个字符串,该函数调用的形式为:,fputs,(字符串,文件指针);,下一页,返 回,上一页,10.2,文件的基本操作,例如:,fputs(“abcd,“,,,fp,);,把字符串“,abcd,”,写入,fp,所指的文件之中。其中,字符串可以是字符串常量,也可以是字符数组名或指针变量。,(2),字符串读函数,fgets,(),fgets,(),函数的功能是从指定的文件中读取一个字符串到字符数组中,函数调用的形式为:,fgets,(,字符数组,字符串长度,文件指针,);,例如:,fgets(str,n,fp,);,从,fp,所指的文件中读出,n-1,个字符送入字符数组,str,中并在读取的最后一个字符后加上字符串结束标志,0,。函数,fgets,(),在读出,n-1,个字符之前,如果遇到了换行符“,n”,或,EOF,,则结束当前读操作。,下一页,返 回,上一页,10.2,文件的基本操作,【,例,10-2】,在例,10-1,中建立的文本文件,str.txt,中追加一个字符串。,【,程序代码,】,#include ,stdio.h,main(),FILE *,fp,;,char ch,st20;,if(fp,=,fopen(str.txt,a,+)=NULL) /*,以追加方式打开文件*,/,printf,(,文件不能打开,!);,exit(0);,下一页,返 回,上一页,10.2,文件的基本操作,printf,(,请输入追加的字符串,:n);,gets(st,); /*,从键盘输入字符串*,/,fputs(st,fp,); /*,在文件尾部写入字符串*,/,printf,(,文本文件的内容为,:n);,rewind(fp,); /*,把文件读写位置定位在文件开头*,/,ch,=,fgetc(fp,);,while(ch,!=EOF),putchar(ch,);,ch,=,fgetc(fp,);,printf(n,);,fclose(fp,);,下一页,返 回,上一页,10.2,文件的基本操作,执行程序时,输入“,This is a string.”,,程序运行结果为:,程序说明:,(1),本例要在文件“,str.txt,”,尾部追加一个字符串,因此在程序中以追加方式,a+,打开文件。,(2),本例执行之后,文本文件“,str.txt,”,的内容为“,This is a text,file.This,is a string.”,,与屏幕输出的结果一致,可在,Windows,环境下打开查看内容。,小测验,如果把本例的文件打开方式换成“,w+”,,文件“,str.txt,”,的内容会是什么?,下一页,返 回,上一页,10.2,文件的基本操作,3.,格式化读写函数(,fscanf,(),和,fprinf,(),),fscanf,(),和,fprinf,(),两个函数的作用与,scanf,(),函数和,printf,(),函数几乎一样,差别只在于它们对文件进行输入,/,输出,而,scanf,(),和,printf,(),是对终端设备(如键盘、显示器)进行输入,/,输出。因此使用,fscanf,(),和,fprintf,(),函数时应该带一个文件指针。,(1),fscanf,(),函数,函数调用的一般形式为:,fscanf,(,文件指针,格式控制字符串,地址表,),;,其中,格式控制字符串和地址表的规定和使用方法与,scanf,(),函数相同。,例如:,fscanf(fp, %d%f,表示从,fp,所指文件中读取一个整数给变量,i,,一个浮点数给变量,x,。,提示:,fscanf,(),函数可以从文件中读取不同数据类型的数据,使用时必须先要明确磁盘上的数据是如何存储的。,下一页,返 回,上一页,10.2,文件的基本操作,(2),fprintf,(),函数,函数调用的一般形式为:,fprintf,(,文件指针,格式控制字符串,输出表列,),;,其中,格式控制字符串和输出表列的规定和使用方法与,printf,(),函数相同。,例如:,fprintf(fp,%d%c,i,ch,);,表示将整型变量,i,和字符变量,ch,的值按指定格式输出到,fp,指向的文件。加入,i=8,ch=a,,则输出到磁盘文件上的数据是,8a,。,下一页,返 回,上一页,10.2,文件的基本操作,10.2.3,二进制文件的读写,二进制文件存储信息的形式与内存中存储信息的形式是一致的,如果需要在内存与磁盘文件之间频繁交换数据,最好采用二进制文件。,二进制文件一般是同类型数据集合,数据之间无分隔符,每个数据所占字节数是一个固定值,因此二进制文件除了可以顺序存取外,还可运用定位函数方便地进行随机存取。,二进制文件的读写操作可用数据块读写函数,fwrite,(),和,fread,(),完成。,运用数据块读写函数可建立整型、实型、结构体类型等各种类型的二进制文件。,数据块写函数调用的一般形式为:,fwrite(buffer,size,count,fp,);,数据块读函数调用的一般形式为:,fread(buffer,size,count,fp,);,下一页,返 回,上一页,10.2,文件的基本操作,两个函数的参数说明:,(1) buffer,是一个指针,在,fread,(),函数中,它表示存放输入数据的首地址;在,fwrite,(),函数中,它表示存放输出数据的首地址。,(2) size,表示数据块的字节数。,(3) count,表示要读写的数据块个数。,(4),fp,为文件指针。,例如:,fwrite(fa,4,5,fp);,其作用是将,fa,指向的存储区中,5,个,4,字节,(,即,1,个实型数据,),大小的数据项写入,fp,所指向的文件中。,例如:,fread(fa,4,5,fp);,其作用是从,fp,所指的文件中,读取,5,个,4,字节大小的数据,存入,fa,所指的存储区中。,下一页,返 回,上一页,10.2,文件的基本操作,【,例,10-3】,从键盘输入两个学生信息(包括姓名、编号、年龄及地址),存入一个二进制文件中,然后再读出这两个学生的信息显示在屏幕上。,【,程序代码,】,#include,struct,stu,/*,定义结构体类型*,/,char name10;,int,num;,int,age;,char addr15;,boya2,boyb2,*pp,*,qq,; /*,定义结构体数组和结构体指针*,/,下一页,返 回,上一页,10.2,文件的基本操作,main(),FILE *,fp,;,char,ch,;,int,i;,pp=,boya,;,qq,=,boyb,;,if(fp,=,fopen(stu_list,wb,+)=NULL),printf,(,文件不能打开,!);,exit(0);,下一页,返 回,上一页,10.2,文件的基本操作,printf(n,请输入两个学生信息:,n);,for(i,=0;i,name,&pp,-,num,&pp,-,age,pp,-,addr,);,pp=,boya,;,/*,下面语句把,2,个学生信息一次性写入文件*,/,fwrite(pp,sizeof(struct,stu),2,fp);,rewind(fp,);,/*,下面语句从文件中读取,2,个学生信息*,/,fread(qq,sizeof(struct,stu),2,fp);,/*,以下语句输出,2,个学生信息*,/,printf(-n,);,下一页,返 回,上一页,10.2,文件的基本操作,printf(nn,姓名,t,编号 年龄 地址,n);,for(i,=0;i,name,qq,-,num,qq,-,age,qq,-,addr,);,fclose(fp,);,执行程序,输入,2,名学生的信息后输出结果为:,下一页,返 回,上一页,10.2,文件的基本操作,程序说明:,(1),本例定义了两个结构数组,boya,和,boyb,用于存放学生的信息,又定义了两个结构指针变量,pp,和,qq,,,pp,指向数组,boya,,,qq,指向数组,boyb,。指针变量的使用给程序处理提供了方便。,(2),本例在磁盘上生成了二进制文件“,stu_list,”,,与文本文件不同,该文件不能直接在,Windows,下打开查看内容。,【,例,10-4】,文件的随机读写。从键盘输入,10,个整数到二进制文件中,然后修改文件中的第,5,个数为原来的,2,倍,并保存到文件中,输出修改后文件的内容。,下一页,返 回,上一页,10.2,文件的基本操作,【,程序代码,】,#include ,stdio.h,#define N 10,void,mywrite(int,*p);,void,myread(int,*p);,void,mymodify,( );,main(),int,i,numN,;,printf(n,请输入,10,个数据,: );,for(i,=0;i,N;i,+),scanf(%d,&numi,);,下一页,返 回,上一页,10.2,文件的基本操作,mywrite(num,);,printf(n,文件中的原始数据为,:n);,myread(num,);,mymodify,();,printf(n,修改后的文件数据为,:n);,myread(num,);,void,mywrite(int,*p) /*,将数组中的数据写入文件*,/,FILE *,fp;int,*q;,fp,=,fopen(list,wb,);,for(q,=,p;q,p+N;q,+),fwrite(q,2,1,fp);,下一页,返 回,上一页,10.2,文件的基本操作,fclose(fp,);,void,myread(int,*p) /*,从文件中读取数据*,/,FILE *,fp,;,int,*q;,fp,=,fopen(list,rb,);,for(q,=,p;q,p+N;q,+),fread(q,2,1,fp);,printf(%3d,*q);,printf(nn,);,下一页,返 回,上一页,10.2,文件的基本操作,fclose(fp,);,void,mymodify,( ) /*,修改文件中的数据*,/,FILE *,fp,;,int,a=0;,fp,=,fopen(list,rb,+);,fseek(fp,4*2,SEEK_SET); /*,定位到第,5,个数的位置*,/,fread( /*,读操作之后指针自动移至第,6,个数的位置*,/,printf(n,第,5,个数是,: %,dn,a,);,a*=2;,下一页,返 回,上一页,10.2,文件的基本操作,fseek(fp,-2,SEEK_CUR); /*,重新定位到第,5,个数的位置*,/,fwrite( /*,将数据写入文件*,/,fclose(fp,);,程序执行过程为:,下一页,返 回,上一页,上一页,10.2,文件的基本操作,程序说明:,(1),二进制文件可以将文件读写指针直接定位到文件的某个位置,然后进行读写操作,即随机读写。,(2),文件定位函数,fseek,(),该函数的功能是把文件定位设置到需要的地方,函数的调用形式为:,fseek,(,文件指针,位移量,起始点,),;,其中,位移量表示移动的字节数,位移量是,long,型数据,可以取正数也可以取负数。位移量为正数时,表示将读写指针从起始点向前移动,位移量为负数时,表示将读写指针从起始点向后移动。,起始点的取值规定有三种:文件首、当前位置和文件尾,具体可用,表,10-2,中的符号或数字表示。 例如:,fseek(fp,4*2,SEEK_SET);,将数据的读取位置定位到距离文件开头第,8,个字节处即第,5,个数的位置。,fseek(fp,-2,SEEK_CUR);,将读写指针从当前位置退回,2,字节。,返 回,10.3,文件应用实例,【,例,10-5】,建立一个存放学生电话簿的数据文件并读取其中的数据。,#include ,stdio.h,#define SIZE 3,struct,list,char name10; /*,姓名*,/,long,tel,; /*,电话*,/,stuSIZE,;,void main(),FILE *,fp,;,char filename10;,int,i;,下一页,返 回,10.3,文件应用实例,printf(enter,a file name:); /*,提供文件名*,/,scanf(%s,filename,);,if (,fp,=,fopen(filename,w,)=NULL),printf(cannot,open this filen);,return;,for(i,=0;i,SIZE;i,+) /*,把数据写入文件*,/,printf(enter,student %d:,i+1);,scanf(%s,%,ld,stui.name,&stui.tel,);,fprintf(fp,%s,%ld,n,stui.name,stui.tel,);,下一页,返 回,上一页,10.3,文件应用实例,fclose(fp,);,fp,=,fopen(filename,r,);,for(i,=0;i,SIZE;i,+) /*,从文件中读取数据并显示*,/,fscanf(fp,%s,%,ld,stui.name,&stui.tel,);,printf(%10s %10ldn,stui.name,stui.tel);,fclose(fp,);,程序执行过程为(以,3,人为例):,下一页,返 回,上一页,10.3,文件应用实例,程序执行过程为(以,3,人为例):,在,Windows,下查看文件,Tel.txt,的内容为:,下一页,返 回,上一页,10.3,文件应用实例,【,例,10-6】,有,N,个学生,每个学生有,3,门课的成绩,从键盘输入学生数据,(,包括学号、姓名、,3,门课成绩,),,计算出平均成绩,并把学生的所有数据存放在磁盘文件,stud,中。,【,程序代码,】,#include ,stdio.h,#define N 2,struct,student,char num6;,char name8;,int,score3;,float,avr,;,下一页,返 回,上一页,10.3,文件应用实例,stuN,sN,;,main(),int,i,j,sum,;,FILE *,fp,;,/*,以下用于输入数据并计算平均成绩*,/,for(i,=0;i,N;i,+),printf(nplease,input,No.%d,score:n,i+1);,printf(stuNo,: );,scanf(%s,stui.num,);,printf(name,: );,下一页,返 回,上一页,10.3,文件应用实例,scanf(%s,stui.name,);,sum=0;,for(j,=0;j3;j+),printf(score%d,: ,j+1);,scanf(%d,&stui.scorej,);,sum+=,stui.scorej,;,stui.avr,=sum/3.0;,fp,=,fopen(stud,wb,); /*,为写打开二进制文件*,/,for(i,=0;i,N;i,+),下一页,返 回,上一页,10.3,文件应用实例,fwrite(&stui,sizeof(struct,student),1,fp);,fclose(fp,); /*,关闭文件*,/,fp,=,fopen(stud,rb,); /*,为读打开二进制文件*,/,for(i,=0;i,N;i,+),fread(&si,sizeof(struct,student),1,fp);,/*,以下用于输出学生的各项数据*,/,printf(-n,);,printf(No.tNametScore1tScore2tScore3taveragen);,for(i,=0;i,N;i,+),printf(%st%st,si.num,si.name,);,for(j,=0;j3;j+),printf(%dt,si.scorej,);,下一页,返 回,上一页,上一页,10.3,文件应用实例,printf(%.2fnn,si.avr);,printf(n,);,程序执行过程为:,返 回,10.4,本章小结,通过本章学习,读者应掌握以下内容:,1.,文件的用途,文件可以长期存储程序中需要的数据。,2.,文件的概念,文件的分类,各类文件的特点。,3.,文件指针的概念和使用。,4.,文件操作的步骤。文件操作一般是按以下步骤进行的:,(1),用,fopen,(),函数打开文件。文件打开时一定要选择正确的文件读写方式。,(2),对文件进行读,/,写操作。,(3),用,fclose,(),函数关闭文件。,对已打开文件的操作是通过文件指针进行的,实际上都是由系统提供的标准读,/,写函数完成的。,下一页,返 回,上一页,10.4,本章小结,6.,文件读写函数。本章介绍了,fputc,(),和,fgetc,(),、,fputs,(),和,fgets,(),、,fprintf,(),和,fscanf,(),以及,fwrite,(),和,fread,(),函数等多种文件读写,应该了解它们的使用及使用场合。,7.,文本文件只能顺序读写,而二进制文件可以顺序读写也可以随机读写。函数,fseek,(),一般用于随机读写时的读写指针定位。,返 回,10.5,实训,实训,1,【,实训内容,】,文本文件的读写。,【,实训目的,】,掌握文本文件的打开、关闭及读写操作。,【,实训题目,】,(,1,)下面源程序文件名为,test.c,,程序执行后将在屏幕上显示自身的内容。阅读程序并上机调式。,#include ,stdio.h,main(),FILE *,fp,;,char,ch,;,下一页,返 回,10.5,实训,if (,fp,=,fopen(test.c,r,)=NULL),puts(can,not open,file:dd.c,);,exit(0);,while (,ch,=,getc(fp,)!=EOF),putchar(ch,);,fclose(fp,);,printf(n,);,下一页,返 回,上一页,10.5,实训,(,2,)以下程序的功能是将源程序文件,file1.c,的内容输出到屏幕上并复制到文件,file2.c,中。请把程序补充完整,并上机调试。,#include ,stdio.h,main(),FILE,;,/*,定义文件指针*,/,fp1=fopen(file1.c,r);,fp2=fopen(file2.c,w);,while (!feof(fp1),putchar(getc(fp1);,; /*,文件指针定位到文件开头*,/,while(!feof(fp1),下一页,返 回,上一页,10.5,实训,putc,( ); /*,文件复制*,/,fclose(fp1);,fclose(fp2);,程序说明:,(,1,)文件,file1.c,是已经编辑过的源程序文件。,(,2,),feof,(),为文件结束判断函数,如果文件操作结束(即遇到文件结束符),函数返回值为非,0,,否则为,0,。,下一页,返 回,上一页,10.5,实训,实训,2,【,实训内容,】,文件顺序读写。,【,实训目的,】,掌握格式化读写函数,fscanf,(),和,fprinf,(),的使用。,【,实训题目,】,分析下面程序输出结果并上机进行验证。,#include ,stdio.h,main( ),FILE *,fp,;,int i,k=0,n=0;,fp=fopen(d1,w);,for(i=1;i4;i+),fprintf(fp,%d,i);,下一页,返 回,上一页,10.5,实训,fclose(fp);,fp=fopen(d1,r);,fscanf(fp,%d%d,printf(%d,%,dn,k,n,);,fclose(fp,);,下一页,返 回,上一页,10.5,实训,实训,3,【,实训内容,】,二进制数据文件读写。,【,实训目的,】,掌握,fwrite,(),与,fread,(),函数的应用。,【,实训题目,】,建立一个存放学生电话簿的二进制数据文件并读取其中的数据。阅读程序并上机调试。,#include ,stdio.h,#define N 5,struct,tel,char name20;,char tel9;,inN,outN,;,下一页,返 回,上一页,10.5,实训,void main( ),FILE *,fp,;,int,i;,char filename40; /* filename,用于存放数据文件名*,/,printf(Please,input filename: );,gets(filename,);,if (,fp,=,fopen(filename,wb,)=NULL),printf(Cant,open the %,sn,filename,);,return;,for(i,=0; iN; i+),下一页,返 回,上一页,10.5,实训,printf(name,: );,gets(ini.name,);,printf(tel,: );,gets(ini.tel,);,fwrite(in,sizeof(struct,tel,), 5,fp,); /*,文件中写入,5,个学生的电话*,/,fclose(fp,);,printf(-TEL.-n,);,fp,=,fopen(filename,rb,); /*,以读方式打开二进制文件*,/,下一页,返 回,上一页,10.5,实训,fread(out,sizeof(struct,tel),5,fp); /*,从文件读取,5,个结构体数据*,/,printf(name,telephonen);,for(i,=0; iN; i+),printf(%-15s%-8sn,outi.name,outi.tel);,fclose(fp,);,返 回,上一页,图,10-1,数据的存储与加工,返 回,磁盘,数据加工,内存,数据文件,表,10-1,文件使用方式,返 回,文件使用方式,功,能,说,明,文本文件,二进制文件,“,r”,“,rb,”,为读打开文件,文件只能读不能写,如果文件不存在,打开文件会出错,“,w”,“,wb,”,为写打开文件,文件只能写不能读,如果文件不存在,建立文件,如果文件存在,覆盖旧文件的内容,“,a”,“,ab,”,为追加打开文件,如果文件不存在,建立文件,如果文件存在,,在文件尾部追加内容,“,r+“,“,rb,+“,为读写打开文件,改变读写操作时不需要关闭文件和重新打开文件,“,w+”,“,wb,+”,为读写打开文件,文件写操作之后可进行读操作,“,a+”,“,ab,+”,为读写打开文件,在文件尾部追加内容后可进行读操作,表,10-2,起始点的取值,返 回,起始点,表示符号,数字表示,文件首,SEEK_SET,0,当前位置,SEEK_CUR,1,文件末尾,SEEK_END,2,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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