18878977809 发表于 2021-2-27 10:57:25

文件操作

本帖最后由 18878977809 于 2021-2-27 11:19 编辑

#include<stdio.h>
#define SIZE 4
struct student
{
        char name;
        int num;
        int age;
        char addr;
}stu;

void load();//将文件读取出来

void save()//将从键盘输入的数据以二进制存储到磁盘文件中
{
        FILE *fp;
        int i;

        if(!(fp=fopen("student_list","wb")))
        {
                printf("Cannot open the file!\n");
                return;
        }
        for(i=0;i<SIZE;i++)
        {
      if(fwrite(&stu,sizeof(struct student),1,fp)!=1)
          {
         printf("file write error!\n");
               fclose(fp);
          }
        }
}

void main()
{
        int i;
           printf("please input the student's name,num,age and address:\n");
        for(i=0;i<SIZE;i++)
        {
      scanf("%s %d %d %s",stu.name,&stu.num,&stu.age,stu.addr);
        }

        save();
        load();
}

void load()
{
        FILE *fp;
        int i;
    if(!(fp=fopen("student_list","rb+")))
        {
                printf("打开错误!\n");
                return;
        }
        for(i=0;i<SIZE;i++)
        {
                if(fread(&stu,sizeof(struct student),1,fp)!=1)//fread(&stu,sizeof(struct student),1,fp)
                {
         printf("file read error!\n");
                  fclose(fp);
                }
                else
                {
            printf("%s %d %d %s\n",stu.name,stu.num,stu.age,stu.addr);
                }
        }

}

//试试在main中去掉下面这段代码,就正常了(前提student_list文件已建立)
#if(0)
        printf("please input the student's name,num,age and address:\n");
        for(i=0;i<SIZE;i++)
        {
      scanf("%s %d %d %s",stu.name,&stu.num,&stu.age,stu.addr);
        }

        save();
#endif

为什么会这样子?
对应题目是小甲鱼老师09年老版的C语言62讲的课后习题

18878977809 发表于 2021-2-27 11:47:10

找出问题了,在save函数中没有断开文件指针fp与文件的关联

刘鑫豪 发表于 2021-2-27 12:57:46

!,好一个自问自答
页: [1]
查看完整版本: 文件操作