local function definitions are illegal是什么意思???
程序代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> struct record{ char name[20]; char street[20]; char city[20]; char eip[20]; char state[20]; }person[500]; struct slnode{ record date; struct slnode *next; struct slnode *prior; }; void initlist(); void load(); void listinsert(); void mainmenu(); void enter(); void searchmenu(); void display(); void search(); void save(); void delet(); typedef slnode *linklist; linklist l; int num=0; FILE *fp; void main() { initlist(); load(); listinsert(); while (l) mainmenu(); } void initlist() { l=new slnode; l->next=l; l->prior=l; } void load(){ if((fp=fopen("person","wb"))==NULL){ printf("通讯录不存在!\n"); exit(0);} else{ printf("通讯录已建立!\n"); printf("按任意键进入主菜单!\n"); getch(); return;} /* fseek (fp,0,2); if(ftell(fp)>0) { rewind(fp); for(num=0;!feof(fp)&&fread(&person[num],sizeof(struct record),l,fp);num++); printf("\n\t\t文件导入成功"); printf("\n\t\t按任意键返回主菜单"); getch(); return; } printf("\n\t\t文件导入成功"); printf("\n\t\t通讯录文件中无任何记录"); printf("\n\t\t按任意键返回主菜单"); getch(); return;*/ } void listinsert(){//增加一个结点 linklist s,p=l; for(int i=0;i<num;i++){ s=new slnode; strcpy(s->date.name,person[i].name); strcpy(s->date.city,person[i].city); strcpy(s->date.street,person[i].street); strcpy(s->date.eip,person[i].eip); strcpy(s->date.state,person[i].state); s->prior=p->prior; s->next=p; p->prior->next=s; p->prior=s; p=p->next;} } void mainmenu()//主菜单 { char ch; printf("******************************************************"); printf("******************欢迎进入通讯录系统******************"); printf("*********welcome to the address book system***********"); printf("****************** 1—添加新记录 *********************"); printf("****************** 2—查找联系人 *********************"); printf("****************** 3—删除联系人 *********************"); printf("****************** 4—保存退出 ***********************"); printf("****************** 5—不保存退出 *********************"); printf("**************** 按其它键刷新主菜单 ******************"); printf("******************************************************"); printf("\n\t\t请选择序号:"); ch=getch(); switch (ch){ case'1':enter();break; case'2':searchmenu();break; case'3':delet();break; case'4':save();break; case'5':exit(0);break; default:mainmenu();} } void enter(){//添加记录 printf("***************** 请输入人员信息 *********************"); printf("\n\t\t姓名:"); scanf("%s",&person[num].name); printf("\n\t\t街道:"); scanf("%s",&person[num].street); printf("\n\t\t城市:"); scanf("%s",&person[num].city); printf("\n\t\t输入邮编:"); scanf("%s",&person[num].eip); printf("\n\t\t国家:"); scanf("%s",&person[num].state); num++; printf("\n\t\t是否继续添加?(Y/N):"); if(getch()=='y') enter(); return; } void searchmenu(){//查询菜单 char ch; printf("******************************************************"); printf("**********************查询菜单************************"); printf("****************** 1—显示所有 ***********************"); printf("****************** 2—按姓名查询 *********************"); printf("**************** 按其它键返回主菜单 ******************"); printf("******************************************************"); printf("\n\t\t请选择序号:"); ch=getch(); switch (ch){ case'1':display();break; case'2':search();break; default:mainmenu();} } void display(){//显示所有 if(num!=0){ printf("************** 以下为通讯录所有信息 *******************"); for(int i=0;i<num;i++){ printf("\n\t\t姓名: %s",person[i].name); printf("\n\t\t街道: %s",person[i].street); printf("\n\t\t城市: %s",person[i].city); printf("\n\t\t邮编: %s",person[i].eip); printf("\n\t\t国家: %s",person[i].state); printf("\t\t"); if(i+1<num) printf("\n\t\t_____________________");} printf("\n\t\t**********************************************"); getch(); return; } void search(){//按姓名查询信息 int i,j=0,a=0; char name[20]; linklist p=l; printf("\n\t\t***************** 按姓名查找 *******************"); printf("\n\t\t请输入姓名:"); scanf("%s",name); for(i=a;i<num;i++,p=p->next,j++;){ if(strcmp(name,p->next->date.name)==0){ printf("查询到的信息:\n"); printf("姓名:%s\n",p->next->date.name); printf("城市:%s\n",p->next->date.city); printf("国家:%s\n",p->next->date.state); printf("街道:%s\n",p->next->date.street); printf("邮政编码:%s\n",p->next->date.eip);} if(j==0) printf("\t\t 该通讯录没有该人!"); if((i+1)<num){ printf("是否继续查找相同名字的人员信息:(y/n)\n"); ch=getchar(); if(ch=='y'){a=i; continue;} else return;} else{ printf("按任意键返回主菜单\n"); getch(); return;} } } void delet(){ int i,j,a=0,findmark=0,deletmark=0; char ch,name[20]; printf("请输入要删除人员姓名:\n"); scanf("%s",name); for (i=a;i<num;i++){ if(strcmp(person[i].name,name)==0){ findmark++; printf("以下是您要删除的人员记录:\n"); printf("_______________________________\n"); printf("姓名:%s\n",person[i].name); printf("街道:%s\n",person[i].street); printf("城市:%s\n",person[i].city); printf("邮编:%s\n",person[i].eip); printf("国家:%s\n",person[i].state); printf("_______________________________\n"); printf("是否删除?(y/n)\n"); if(getch()=='y'){ for(j=i;j<num-1;j++) person[j]=person[j+1]; num--; deletemark++; printf("\n\t\t删除成功!"); if((i+1)<num){ printf("\n\t\t是否继续删除相同姓名的人员信息?(y/n)"); ch=getchar(); if(ch=='y'){a=i;continue;} } printf("\n\t\t是否继续删除?(y/n)"); ch=getchar(); if(ch=='y') delet(); return;} if((i+1)<num){ printf("\n\t\t是否继续删除相同姓名的人员信息?(y/n)"); ch=getchar(); if(ch=='y'){a=i;continue;} } } else continue; } if((deletemark==0)&&(findmark==0)){ printf("\n\t\t有重名信息!"); return; } else if(findmark!=0){ printf("\n\t\t没有重名信息!"); printf("\n\t\t没有该人员的记录!"); return;} } void save(){//写入文件 if((fp=fopen("person","wb"))==NULL){ printf("文件打开失败!\n");} for (int i=0;i<num;i++){ if(fwrite(&person[i],sizeof(struct record),l,fp)!=l){ printf("文件打开失败!\n");} for(i=0;i<num;i++){ if(fwrite(&person[i],sizeof(struct record),l,fp)!=l) printf("写入文件错误!\n");} fclose(fp); printf("通讯录文件已保存\n"); printf("按任意键退出程序\n"); exit(0); } }