第十三章 文件_488308709.ppt

第十三章 文件_488308709

* 13.4 文件的读写 验证在磁盘文件“stu-list”中是否已存在此数据, 用以下程序从“stu-list”文件中读入数据,然后在 屏幕上输出。 #include stdio.h #define SIZE 4 struct student_type { char name[10]; int num; int age; char addr[15]; }stud[SIZE]; main( ) { int i; FILE*fp; fp=fopen(stu-list,rb); for(i=0;iSIZE;i++) {fread(stud[i],sizeof(struct student_type),1,fp); printf(%-10s %4d %4d %-15s\n,stud[i].name, stud[i].num,stud[i]. age,stud[i].addr); } fclose (fp);} 屏幕上显示出以下信息: Zhang 1001 19 room-101 Fun 1002 20 room-102 Tan 1003 21 room-103 Ling 1004 21 room-104  * 13.4 文件的读写(续) 如果已有的数据已经以二进制形式存储在一个磁盘文件 “stu-dat”中,要求从其中读入数据并输出到 “stu-list”文件中,可以编写一个load函数, 从磁盘文件中读二进制数据。 void load( ) {FILE *fp;int i; if((fp=fopen(stu-dat,rb))==NULL) { printf(cannot open infile\n); return;} for(i=0;iSIZE;i++) if(fread(stud[i],sizeof(struct student_type),1,fp)!=1) { if(feof(fp)) {fclose(fp); return;} printf(file read error\n); } fclose (fp); } * 13.4 文件的读写(续) 三、格式化读写函数(fprintf()和fscanf()) 函数调用: fprintf ( 文件指针,格式字符串,输出表列); fscanf ( 文件指针,格式字符串,输入表列); 函数功能: 从磁盘文件中读入或输出字符。 例: fprintf(fp,”%d,%6.2f”,i,t); fscanf (fp,”%d,%f”,i,t); 注意: 用fprintf和fscanf函数对磁盘文件读写,使用方便,容易理解, 但由于在输入时要将ASCII码转换为二进制形式,在输出时又要 将二进制形式转换成字符,花费时间比较多。因此,在内存与磁 盘频繁交换数据的情况下,最好不用fprintf和fscanf函数,而 用fread和fwrite函数。 * 13.4 文件的读写(续) 三、其他读写函数 putw()和getw() 函数调用: putw(int i,FILE * fp); int i = getw(FILE * fp); 函数功能: 对磁盘文件中读写一个字(整数)。 例: putw(10,fp); i = getw(fp); getw函数定义如下: getw(int i, FILE *fp) { char * s; s=(char*)i; s[0] = getc(fp); s[1] = getc(fp); return i; } 非标准函数,不要受干扰 * 13.4 文件的读写(续) 用户自定义读取其他类型数据的函数。 向磁盘文件写一个实数(用二进制方式)的函数putfloat : putfloat(float num,FILE *fp) { char * s; int count; s = (char*)num; for(count = 0;count 4;count++) putc(s[count],fp); } 如何用 fwrite 实现这个功能? putfloat(float num,FILE *fp) { fwrite(num,sizeof(float),1,fp); } * 13.4 文件的读写(续) fgets函数 函数作用: 从指定文件读入一个字符串。 函数调用: fgets(str,n,

文档评论(0)

1亿VIP精品文档

相关文档