C写的通讯录,将数据写下文件时多了点东西,从文件读出时出错,求指教

C写的通讯录,将数据写入文件时多了点东西,从文件读出时出错,求指教

/*班级通讯录管理系统
以本班同学的具体数据为背景,设计实现一个本班同学通讯录管理系统,实现以下功能:
1) 通讯录编辑(添加、删除);
2) 按不同的项进行查找;
3) 对已存在的通讯录按不同的项排序;
4) 将通讯录写入文件;
5) 从文件读入通讯录。
备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail。

希望前辈们多多指导,多多提携,让小子在编程的这条路上走的更远,不胜感激!
如果前辈能提供一些您的小程序供我们学习,那最好不过,呵呵...
*/


#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50

typedef struct {     //定义结构体
        char   name[20];
        char   address[20];
        char   tel[12];
        char   youbian[8];
        char   Email[32];
}Node;

typedef struct {    //静态链表
        Node *elem;
        int  length;
        int  listsize;
}Sqlist;
        
void InitSqlist(Sqlist *L){            //初始化
     L->elem=(Node *)malloc(MaxSize*sizeof(Node));
     if(!L->elem) exit(0);
     L->length=0;
     L->listsize=MaxSize;
}



void InsertElem(Sqlist *L){      //添加成员
     Node *base;
     int n;
     n=L->length;
     if(L->length>=L->listsize) {
      base=(Node *)realloc(L->elem,(L->listsize+10)*sizeof(Node));
      L->elem=base;
      (L->listsize)+=10;
      }

      printf("please input %dth data: ",n+1); 
       printf("\n name   : ");
        scanf("%s",L->elem[n].name);
       printf("\n address: ");
       scanf("%s",L->elem[n].address);
       printf("\n tel    : ");
      scanf("%s",L->elem[n].tel);
       printf("\n youbian: ");
       scanf("%s",L->elem[n].youbian);
       printf("\n Email  : ");
      scanf("%s",L->elem[n].Email);
      /*
      printf("please input %dth data: ",n+1); 
       printf("\n name   : ");
        gets(L->elem[n].name);    //如果只写一行 直接就跳过去了,为什么?
        gets(L->elem[n].name);
       printf("\n address: ");
       gets(L->elem[n].address);
       printf("\n tel    : ");