为什么打开一个已创建的文件会出错?
#include<stdio.h>#include<malloc.h>
#include<stdlib.h>
#include<string.h>
typedef struct student
{
int num;
int age;
struct student *link;
}stud;
stud* creat(int n)
{
stud *h,*p;
int i;
h=(stud *)malloc(sizeof(stud));
if(h==NULL)
{
printf("not enough memory!");
return(0);
}
h=NULL;
for(i=0;i<=n;i++)
{
if((p=(struct student *)malloc(sizeof(stud)))==NULL)
{
printf("内存不足!");
return(0);
}
scanf("%d",&p->num);
scanf("%d",&p->age);
p->link=h;
h=p;
}
return(h);
}
stud* insert(stud *h)
{
stud *p,*q,*d;
p=h;
int n;
q=h->link;
d=(stud *)malloc(sizeof(stud));
if(d==NULL)
{
printf("内存不足!");
}
printf("请输入插入位置的前一个数!");
scanf("%d",&n);
if(n==p->num||n==p->age)
{
printf("请输入要插入的数 !");
scanf("%d",&d->num);
scanf("%d",&d->age);
d=h;
p=d->link;
}
else if
(n==q->num||q->age)
{
printf("请输入要插入的数 !");
scanf("%d",&d->num);
scanf("%d",&d->age);
d->link=p->link;
p->link=d;
}
else if(n!=p->num&&n!=q->num)
{
while(q->num!=NULL&&p->num!=NULL)
{
p=p->link;
q=q->link;
if(n==q->num)
{
printf("请输入要插入的数字!");
scanf("%d",&d->num);
scanf("%d",&d->age);
d->link=p->link;
p->link=d;
}
break;
}
}
return(h);
}
void search(stud *h)
{
stud *p;
int m;
printf("请输入需查找数据!");
scanf("%d",&m);
p=h;
while(p!=NULL)
{
if(m==p->num||m==p->age)
{printf("%d %d\n",p->num,p->age);
break;
}
else
p=p->link;
}
if(p==NULL)
printf("无此数!");
}
stud *delet(stud *h)
{
stud *q,*p;
p=h;
int n;
q=h->link;
printf("请输入要删除的数字!");
scanf("%d",&n);
if(n==p->num||n==p->age)
h=p->link;
else if(n==q->num||n==q->age)
p->link=q->link;
else if(n!=p->num&&n!=q->num)
while(q->link!=NULL&&p->link!=NULL)
{
p=p->link;
q=q->link;
if(n==q->num||n==q->age)
p->link=q->link;
}
return(h);
}
void print(stud *h)
{
stud *p;
p=h;
while(p!=NULL)
{
printf("%3d %d\n",p->num,p->age);
p=p->link;
}
}
void save(stud *h) //保存函数//
{
stud *p;
FILE *fp;
p=h;//头指针赋给p//
fp=fopen("d:\\wj123","a");
if(fp==NULL)
{
printf("memeory error!");
}
while(p!=NULL)
{
fwrite(p,sizeof(stud),1,fp);
p=p->link;
fclose(fp);
}
printf("save successful !\n");
}
stud *load()
{
stud *p,*h;
FILE *fp;
fp=fopen("d:\\j123","a");//打开一个文件//
if(fp==NULL)//检测文件能否打开//
{
printf("can not open file!");
return(0);
}
p=(stud *)malloc(sizeof(stud));//申请空间。。。是这样的吗//
if(p==NULL)
{
printf("内存溢出!");
return(0);
}
h=NULL;
while(feof(fp)!=NULL)
{
if(fread(p,sizeof(stud),1,fp)==NULL)//若没读到数据,跳出循环//
break;
else p->link=(stud *)malloc(sizeof(stud));//为下一个结点申请空间//
if(p->link==NULL)
{
printf("内存溢出!");
return(0);
}
p->link=h;//建立链表//
h=p;
}
fclose(fp);
printf("loading successul !\n");
return(h);
}
void main()
{
struct student *h;
h=creat(1);
save(h);
load();
print(h);
insert(h);
print(h);
save(h);
load();
print(h);
search(h);
}