求大神帮忙看看 为什么cfree没有报错但是就是运行不了
#include<stdio.h>#include<string.h>
#include<stdlib.h>
#define Insert 1 //增加订单
#define Query 2 //查找订单
#define Update 3 //修改订单
#define Delete 4 //删除订单
#define List 5 //列出所有订单
#define Quit 0 //退出系统
FILE *fp;
struct Node
{
char name[20];
char foodname[20];
int sum;
char time[20];
int number;
struct Node *next;
};
struct Node *pointer,*tail; //pointer指向第一订餐的学生,tail指向最近一次订餐的学生
int last=0; //当前订餐总人数
void showMenu();
void doChoice(int);
int getChoice();
void doQuit();
void doInsert();
void doUpdate();
void doQuery();
void doDelete();
void doListAll();
void init();
int main(int argc,char *argv[])
{
int choice; //用户选择功能
init(); //从文件中初始化订餐信息
while(1)
{
showMenu(); //显示主菜单
choice=getChoice(); //获取用户选择
doChoice(choice);
system("pause>nul") ; //执行用户选择
}
return 0;
}
void init()
{
int i=0;
struct Node *p;
pointer=tail=NULL;
if((fp=fopen("order.dat","rb"))==NULL)
{
last=0;//当前没有订餐数据
}
else
{
while(!feof(fp))
{
if((p=(struct Node *)malloc(sizeof(struct Node)))==NULL)
{
printf("系统内存故障,退出程序");
exit(0);
}
if(fread(p,sizeof(struct Node),1,fp)==1)
{
if(i==0)
{
pointer=tail=p; //第一个订餐学生
}
i++;
tail->next=p;
tail=p;
}
}
tail->next=NULL;
last=i;
}
fclose(fp);
}
void save() //保存订单信息到文件pointer.txt中
{
struct Node *p=pointer;
if((fp=fopen("order.txt","wb"))==NULL)
{
printf("不能打开订单信息,请检查");
exit(0);
}
while(p!=NULL)
{
if(fwrite(p,sizeof(struct Node),1,fp)==1)
{
p=p->next;
}
}
fclose(fp);
}
void showMenu()
{
system("cls");
printf("**********Student Food-Order System*********\n");
printf("\t\t1. 点外卖\n");
printf("\t\t2. 查找订单\n");
printf("\t\t3. 修改订单\n");
printf("\t\t4. 删除订单\n");
printf("\t\t5. 查看所有订单\n");
printf("\t\t6. 退出系统\n");
printf("************************\n");
printf("请输入你的选择(0---6):\n");
}
void doQuit()
{
printf("\n欢迎使用本系统,再见!");
exit(0);
}
void doInsert()
{
struct Node *p;
if((p=(struct Node *)malloc(sizeof(struct Node)))==NULL)
{
printf("该店点餐人员爆满,请稍后进入");
return ;
}
printf("请输入编号:");
scanf("%d",&(p->number));
printf("请输入姓名:");
scanf("%s",p->name);
printf("请输入菜名:");
scanf("%s",p->foodname);
printf("请输入人数:");
scanf("%d",&(p->sum));
printf("请输入用餐时间:");
scanf("%s",p->time);
printf("点餐成功\n");
if(tail!=NULL)
{
tail->next=p;
tail=tail->next;
}
else
{
{
for(p=pointer;p->next!=NULL;p=p->next)
p->next=p;
}
tail->next=NULL;
last++;
save();
}
}
void doUpdate()
{
int number;
int i;
int find=0;
struct Node *p=pointer;
printf("请输入要修改的订单号码:");
scanf("%d",&number);
while((p!=NULL)&&(!find))
{ if(p->number==number)
{
find=1;
printf("你要找的订单信息如下:\n");
printf("*******************************");
printf("姓名:%s\t",p->name);
printf("菜名:%s\t",p->foodname);
printf("人数:%d\t",p->sum);
printf("用餐时间%s\t",p->time);
printf("*******************************");
printf("请输入修改后的信息:\n");
printf("姓名:\n");
scanf("%s",p->name);
printf("菜名:\n");
scanf("%s",p->foodname);
printf("人数:\n");
scanf("%d",&(p->sum));
printf("请输入用餐时间:\n");
scanf("%s",p->time);
}
p=p->next;
}
if(!find)
{
printf("无法找到该订单,请重新下单\n");
}
else
{
printf("该订单修改成功\n");
save();
}
p=NULL;
}
void doListAll()
{
struct Node *p=pointer;
printf("该店目前有%d人在线\n",last);
while(p!=NULL)
{
printf("*******************************\n");
printf("姓名:%s\t",p->name);
printf("菜名:%s\t",p->foodname);
printf("人数:%d\t",p->sum);
printf("用餐时间%s\n",p->time);
p=p->next;
}
printf("***************************\n");
}
void doQuery()
{
int number;
int i;
int find=0;
struct Node *p=pointer;
printf("处理查询.....\n");
printf("请输入订单号码:");
scanf("%d",&number);
while((p!=NULL)&&(!find))
{ if(p->number==number)
{
find=1;
printf("你要找的订单信息如下:\n");
printf("*******************************\n");
printf("姓名:%s\t",p->name);
printf("菜名:%s\t",p->foodname);
printf("人数:%d\t",p->sum);
printf("用餐时间%s\t",p->time);
}
p=p->next;
}
if(!find)
{
printf("没有此订单\n");
}
}
void doDelete()
{
int number;
int i;
int find=0;
int index;
struct Node *p=pointer;
struct Node *pre=pointer;
printf("处理删除.....\n");
printf("请输入订单编号:\n");
scanf("%d",&number);
while((p!=NULL)&&(!find))
{
if(p->number==number)
{
find=1;
index=i;
break;
}
pre=p;
p=p->next;
}
if(!find)
{
printf("没有该编号订单\n");
}
else
{
if(p==pre)
{
pointer=NULL;
last=0;
}
else
{
pre->next=p->next;
last--;
printf("订单已删除\n");
save();
}
}
}
int getChoice()
{
int choice;
scanf("%d",&choice);
return choice;
}
void doChoice(int choice)
{
switch(choice)
{
case Insert:
doInsert();
break;
case Query:
doQuery();
break;
case Update:
doUpdate();
break;
case Delete:
doDelete();
break;
case List:
doListAll();
break;
case Quit:
doQuit();
}
}