向文件读取数据问题,请教前辈。
我最近自学c语言,用的是谭浩强老师的《C程序设计》。下面是卡住我半天的一个问题,恳请前辈解疑。程序代码:
#include <stdio.h> #define SIZE 10 struct student_type {char name[10]; int num; int age; char addr[15]; }stud[SIZE]; // 定义全局结构体数组stud,包含10个学生数据 void save( ) // 定义函数save,向文件输出SIZE个学生的数据 {FILE *fp; int i; if((fp=fopen ("stu.dat","wb"))==NULL) // 打开输出文件atu_list {printf("cannot open file\n"); return; } for(i=0;i<SIZE;i++) if(fwrite (&stud[i],sizeof (struct student_type),1,fp)!=1) printf ("file write error\n"); fclose(fp); } int main() {int i; printf("Please enter data of students:\n"); for(i=0;i<SIZE;i++) // 输入SIZE个学生的数据,存放在数组stud中 scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr); save( ); return 0; }
如上,当运行进入save函数时,第一个if语句是判别是否能够打开文件;第二个if语句是判断函数是否执行成功。我并没有看到fwrite函数有给文件写入数据的语句呀,怎么会把数据填入磁盘呢? 难道是第二个if语句中的的fwrite函数有两重作用,一个作用是当做执行语句,另一个是做为判断的条件?
如下面这个程序,我清楚地看到了fread函数读到了一组数据。
程序代码:
#include <stdio.h> #include <stdlib.h> #define SIZE 10 struct student_type {char name[10]; int num; int age; char addr[15]; }stud[SIZE]; int main( ) {int i; FILE *fp; if((fp=fopen ("stu.dat","rb"))==NULL) // 打开输入文件atu.dat {printf("cannot open file\n"); exit(0) ; } for(i=0;i<SIZE;i++) {fread (&stud[i],sizeof(struct student_type),1,fp); // 从fp指向的文件读入一组数据 printf ("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i]. age,stud[i].addr); // 在屏幕上输出这组数据 } fclose (fp); // 关闭文件"stu.dat" return 0; }
抱歉,我刚开始学,基础很薄弱,可能描述的也不清楚。您要是看不懂,我再做解释。谢谢解答!