每次选择显示 添加 删除 修改功能时都会关闭程序,,,,可能我的读取文件函数写的有问题,求大神帮我看看
#include<stdio.h>#include<string.h>
#include<stdlib.h>
struct record
{
int num;//序号
char name[20];
char units[30];//单位
char del[20];//固定电话
char phone[20];
char add[20];//地址
char QQ[20];
char EMAIL[30];
char note[20];//分类(例如同事、朋友、同学、家人)
struct record *next;
}*p,*head,*last,*p1,*p2,*p3;
void writefile(struct record *d)//写入文件
{
FILE *fp;
fp=fopen("e:\\a.txt","w+");
for(p=d;p!=NULL;p=p->next)
{
fprintf(fp,"%d %s %s %s %s %s %s %s %s\n",p->num,p->name,p->units,p->del,p->phone,p->add,p->QQ,p->EMAIL,p->note);
}
fclose(fp);
}
struct record *readfile()//读取文件
{
FILE *fp;
fp=fopen("e:\\a.txt","r");
head=NULL;
p=(struct record *)malloc(sizeof(struct record));
p=head;
rewind(fp);
while(!feof(fp))
{
fscanf(fp,"%d %s %s %s %s %s %s %s %s",&p->num,p->name,p->units,p->del,p->phone,p->add,p->QQ,p->EMAIL,p->note);
p->next=NULL;
p1=(struct record *)malloc(sizeof(struct record));
p->next=p1;
p=p1;
}
return head;
fclose(fp);
}
void shuru()//输入函数
{
int c;
head=NULL;
last=NULL;
scanf("%d",&c);
while(c!=0)
{
p=(struct record *)malloc(sizeof(struct record));
scanf("%s %s %s %s %s %s %s %s",p->name,p->units,p->del,p->phone,p->add,p->QQ,p->EMAIL,p->note);
p->num=c;
p->next=NULL;
if(head==NULL)
{head=p;last=p;}
else
{last->next=p;last=p;}
scanf("%d",&c);
}
writefile(head);
}
void seen()//显示信息的函数
{
int i=0;
*head=*readfile();
for(p=head;p!=NULL;p=p->next)
{
printf("%d %s %s %s %s %s %s %s %s\n",p->num,p->name,p->units,p->del,p->phone,p->add,p->QQ,p->EMAIL,p->note);
i++;
if(i%10==0)
{printf("请按任意键继续\n");getch();}//实现自动分屏功能
}
}
void sort1(int num)//按序号查找
{
*head=*readfile();
for(p=head;p!=NULL;p=p->next)
{ if(num==p->num)
{printf("%d %s %s %s %s %s %s %s %s\n",p->num,p->name,p->units,p->del,p->phone,p->add,p->QQ,p->EMAIL,p->note);
break;}
}
if(p==NULL)
printf("未查到此人\n");
}
void sort2(char name[20])//按姓名查找
{
*head=*readfile();
for(p=head;p!=NULL;p=p->next)
{ if(strcmp(name,p->name)==0)
{printf("%d %s %s %s %s %s %s %s %s\n",p->num,p->name,p->units,p->del,p->phone,p->add,p->QQ,p->EMAIL,p->note);
break;}
}
if(p==NULL)
printf("未查到此人\n");
}
void sort3(char del[20])//按固定电话查找(移动电话、地址、QQ、EMAIL同理)
{
*head=*readfile();
for(p=head;p!=NULL;p=p->next)
{ if(strcmp(del,p->del)==0)
{printf("%d %s %s %s %s %s %s %s %s\n",p->num,p->name,p->units,p->del,p->phone,p->add,p->QQ,p->EMAIL,p->note);
break;}
}
if(p==NULL)
printf("未查到此人\n");
}
void sort4(char note[20],int num)//按分类和序号查找
{
*head=*readfile();
for(p=head;p!=NULL;p=p->next)
{ if(strcmp(note,p->note)==0&&num==p->num)
{printf("%d %s %s %s %s %s %s %s %s\n",p->num,p->name,p->units,p->del,p->phone,p->add,p->QQ,p->EMAIL,p->note);
break;}
}
if(p==NULL)
printf("未查到此人\n");
}
void insert(struct record *q)//添加信息函数
{
*head=*readfile();
p1=p2=head;
while(p1!=NULL&&q->num<p1->num)
{
p2=p1;p1=p1->next;
}
if(p1==head)
{q->next=head;head=q;}
else
{
q->next=p1;p2->next=q;
}
writefile(head);
}
void dele(char name[20])//删除信息函数
{
*head=*readfile();
p1=p=head;
while(p!=NULL&&strcmp(name,p->name)==0)
{p1=p;p=p->next;}
if(p==NULL)
printf("没有找到要删除的信息\n");
else if(p==head)
{head=p->next;}
else
{p1->next=p->next;}
writefile(head);
}
void revise(struct record *q,int num)//修改信息函数
{
*head=*readfile();
for(p=head;p!=NULL;p=p->next)
{
if(p->num==num)
{p->num=q->num;strcpy(p->name,q->name);strcpy(p->units,q->units);strcpy(p->del,q->del);
strcpy(p->phone,q->phone);strcpy(p->add,q->add);strcpy(p->QQ,q->QQ);
strcpy(p->EMAIL,q->EMAIL);strcpy(p->note,q->note);
}
}
writefile(head);
}
void menu()//菜单,可以返回菜单
{ int a,b,num;
char name[20];
char del[20];
char note[20];
printf("1.输入 2.显示 3.查找 4.添加 5.删除 6.修改\n");
scanf("%d",&a);
p3=NULL;
switch(a)
{
case 1:shuru();break;
case 2:seen();break;
case 3:printf("请选择查找方式:1.按序号查找 2.按姓名查找 3.按固定电话查找 4.按分类和序号查找\n");
scanf("%d",&b);
switch(b)
{
case 1:printf("请输入要查找的序号:");
scanf("%d",&num);
sort1(num);break;
case 2:printf("请输入要查找的姓名:");
scanf("%s",name);
sort2(name);break;
case 3:printf("请输入要查找的固定电话:");
scanf("%s",del);
sort3(del);break;
case 4:printf("请输入要查找的类别及序号:");
scanf("%s%d",note,&num);
sort4(note,num);break;
default:break;
}break;
case 4:printf("请输入要添加的新纪录:");
scanf("%d%s%s%s%s%s%s%s%s",&p3->num,p3->name,p3->units,p3->del,p3->phone,p3->add,p3->QQ,p3->EMAIL,p3->note);
insert(p3);break;
case 5:printf("请输入要删除的姓名为:");
scanf("%s",name);
dele(name);break;
case 6:printf("请输入要修改的序号为:");
scanf("%d",&num);
printf("请继续输入修改后的内容为:");
scanf("%d%s%s%s%s%s%s%s%s",&p3->num,p3->name,p3->units,p3->del,p3->phone,p3->add,p3->QQ,p3->EMAIL,p3->note);
revise(p3,num);break;
default:printf("error\n");break;
}
}
int main()
{
int x;
printf("请选择是否开启通讯录功能:1.是 0.否(直接退出)\n");
scanf("%d",&x);
for(;x!=0;)
{menu();
printf("请选择是否开启通讯录功能:1.是 0.否(直接退出)\n");
scanf("%d",&x);
}//可以返回菜单
return 0;
}
每次选择显示 添加 删除 修改功能时都会关闭程序,,,,可能我的读取文件函数写的有问题,求大神帮我看看