《kj第章文件编程技巧分析》课件.pptVIP

  • 3
  • 0
  • 约1.95万字
  • 约 51页
  • 2018-11-12 发布于广西
  • 举报
10.3.2 每次读写一个数据块的编程技巧分析 例10.2 某公司有100名员工,从键盘上输入每个员工的编号、姓名、职务、年龄,使用fwrite函数,将这些信息写入文件staff.dat中。程序如下: for (i=0; iN; i++) /*每项信息输入后按回车键*/ {printf(输入编号: ); scanf(%d, sta[i].num); getchar(); /*抵消前面的回车符*/ printf(输入姓名: ); gets(sta[i].name); getchar(); /*抵消前面的回车符*/ printf(输入职务: ); gets(sta[i].post); printf(输入年龄: ); scanf(%d,sta[i].age); } for (i=0;iN;i++) /*向文件写入员工的信息*/ fwrite(sta[i], sizeof(struct staff), 1, fp); fclose(fp); return 0; } #include stdio.h #define N 100 struct staff {int num; char name[16]; char post[12]; int age; } sta[N]; int main() {FILE *fp; int i; if ((fp=fopen(staff.dat, wb)) ==NULL) {printf(Cant open file!); exit(0); } 分析:由于员工的各项信息的数据类型不同,所以,在程序中,使用结构体数组存放员工信息。最后循环100次,每次用fwrite函数写入一个员工的信息到staff.dat中。因为每个结构体数组元素占32个字节(sizeof(struct staff)(在Turbo C系统中),所以每次写入32个字节。本例是将所有员工的信息写入文件中,也可以有选择地写入文件,例如将年龄小于40的写入文件,程序请读者完成。 当使用循环输入员工的信息时,在每次输入字符串之前,使用了“getchar();”语句,目的是抵消前面输入时的回车符,防止将前面输入的回车符作为字符串。 采用fgetc与fputc读写或者采用fgets与fputs读写文件内容的一般是文本文件,而采用fread与fwrite读写文件内容是二进制的。本例写入文件内容是采用二进制。 10.3 文件知识编程技巧分析 例10.3 打开上例中得到的文件staff.dat。文件staff.dat中存放了100个员工的信息,每个员工的信息包括编号、姓名、职务、年龄。读取文件内容,将编号大于60的员工信息显示在屏幕上。程序如下: #include stdio.h #define N 100 struct staff {int num; char name[16]; char post[12]; int age;} sta[N]; int main() {FILE *fp; int i; if ((fp=fopen(staff.dat, rb))==NULL) {printf(Cant open file!); exit(0); } for (i=0; iN; i++) fread(sta[i], sizeof(struct staff), 1, fp); /*从文件staff.dat中读取员工信息,存放在数组sta中*/ 10.3 文件知识编程技巧分析 for (i=0; iN; i++) /*显示编号大于60的员工*/ if (sta[i].num60) {printf(编号:%d, 姓名:%s , sta[i].num ,sta[i].name); printf(职务%s, 年龄:%d\n , sta[i].post, sta[i].age); } fclose(fp); return 0; } 分析:本程序使用fread函数读取文件中的内容,每次读取一个员工的信息,即32个字节(sizeof(struct staff)。读取来的内容存放在数组sta中。最后通过循环显示编号大于60的员工。可以利用读取来的内容(即存放于数组中的内容)做许多运算,例如,计算年龄的平均值、查找并显示职务是“工程师”的员工信息等等,程序请读者编写。 例

文档评论(0)

1亿VIP精品文档

相关文档