C语言程序设计-胡宏智-(含例题)第08章课案.ppt
8.3文件操作的常用函数 语言程序设计 第八章 文 件 C (4)数据块读写 前面介绍的几种读写文件的方法,对其复杂的数据类型无法以整体形式向文件写入或从文件读出。C语言提供成块的读写方式来操作文件,使其数组或结构体等类型可以进行一次性读写。成块读写文件函数的调用形式为: fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 其中,buffer是数据块的指针,对fread()来说,它是一个内存块的首地址,输入的数据存入这个内存块中;对于fwrite()来说,它是准备输出的数据块的起始地址。size表示每个数据块的字节数,count用来指定每读、写一次,输入或输出数据块的个数(每个数据块具有size字节)。fp为文件指针。 关于成块的文件读写,在创建文件时只能以二进制文件格式创建。 8.3.3文件的顺序读写及其范例 8.3文件操作的常用函数 语言程序设计 第八章 文 件 C 【例8-5】向磁盘写入格式化数据,再从该文件读出显示到屏幕。 #include "stdio.h" #include "stdlib.h" main() { FILE *fp1; int i; struct stu /*定义结构体*/ { char name[10]; char num[9]; float score[2]; }student;。 8.3.3文件的顺序读写及其范例 EX8_5.c演示 8.3文件操作的常用函数 语言程序设计 第八章 文 件 C if((fp1=fopen(“d:\\t1.txt","wb"))==NULL) /*以只写方式打开二进制文件*/ { printf("Cannot open file.\n"); exit(0); } printf("input data:\n"); for(i=0;i<2;i++) {scanf("%s %s %f %f",student.name, student.num,&student.score[0], &student.score[1]); /*输入一条记录*/ fwrite(&student,sizeof(student),1,fp1); /*成块写入文件*/ } fclose(fp1); 8.3.3文件的顺序读写及其范例 8.3文件操作的常用函数 语言程序设计 第八章 文 件 C if((fp1=fopen(“d:\\t1.txt","rb"))==NULL) /*重新以二进制只写打开文件*/ { printf("Cannot open file.\n"); exit(0); } printf("Output from file:\n"); for(i=0;i<2;i++) {fread(&student,sizeof(student),1,fp1); /*从文件成块读*/ printf("%s %s %7.2f %7.2f\n",student.name, student.num,student.score[0], student.score[1]); /*显示到屏幕*/ } fclose(fp1); } 8.3.3文件的顺序读写及其范例 8.3文件操作的常用函数 语言程序设计 第八章 文 件 C 8.3.4文件的随机读写及其范例 前面介绍的对文件的操作都是顺序读写,即从文件的第一个数据开始,依次进行读写。由指向文件的指针自动移位。但在实际对文件的应用中,还往往需要对文件中某个特定的数据进行处理,这就要求对文件具有随机读写的功能,也就是强制将文件的指针指向用户所希望的指定位置。C语言对文件的定位提供了三个函数fseek()、rewind()和ftell()。 8.3文件操作的常用函数 语言程序设计 第八章 文 件 C (1)改变文件位置指针函数fseek() fseek(fp,Offset,position); 其中:fp为文件型指针;position为起始点,指出以文件的什么位置为基准进行移动。position的值用整常数表示。ANSI C允许它有下列三个值之一: 0——文