关于结构体
今晚朋友叫我帮忙查问题,程序是他课本上的例子,由于本人较长时间没接触C语言,调试时报的错误不知道怎么解决。编译通过,运行时,在插入的那一步会出问题,当输入完人数按回车就会报错:“test1.exe 中的 0x50d16af2 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突”,在此请教各位大侠,附上代码,谢谢。
# include "stdio.h"# include "string.h"# define MaxSize 20struct guest_info{ char name[8]; int sum; char time[10]; int number;}GuestList[MaxSize];void Insert(int *);void Search(int );void Update(int );void Delete(int *);void Show(int );int main(){int i;int count=0;do{ printf("\n");printf("1---插入(Insert)\n");printf("2---查询(Search)\n");printf("3---修改(Update)\n");printf("4---删除(Delete)\n");printf("5---显示(Show)\n");printf("6---退出(Exit)\n");scanf("%d",&i); switch(i) { case 1:Insert(&count); break; case 2:Search(count); break; case 3:Update(count); break; case 4:Delete(&count); break; case 5:Show(count); break; case 6:break; default:printf("错误选择!请重选");break;}}while(i!=6);return 0;}void Insert(int * count){int i, in_number;if(*count==MaxSize){printf("空间已满!");return;} printf("请输入编号:"); scanf("%d",&in_number); for(i=* count;i<* count+1;i++) { if(GuestList[i].number==in_number) {printf("已经有相同的编号:");return;} GuestList[i].number=in_number; printf("请输入姓名:"); scanf("%s",GuestList[i].name); printf("请输入人数:"); scanf("%d",GuestList[i].sum); printf("请输入用餐时间:"); scanf("%s",GuestList[i].time); } ( * count)++; }void Search(int count){int i,number,flag=1;printf("请输入要查询的编号:");scanf("%d",&number);for(i=0;i<=count&&flag;i++)if(GuestList[i].number==number){ printf("姓名:%s",GuestList[i].name); printf("人数:%d",GuestList[i].sum); printf("用餐时间:%s",GuestList[i].time); flag=0;}elseprintf("没有查询到!!");}void Update(int count){int i,number,flag=1;printf("请输入要修改数据的编号:");scanf("%d",&number);for(i=0;i<=count&&flag;i++)if(GuestList[i].number==number){ printf("请输入人数:"); scanf("%d",&GuestList[i].sum); printf("请输入用餐时间:"); scanf("%s",GuestList[i].time); flag=0;}elseprintf("没有查询到可以修改的数据!!");}void Delete(int *count){ int i,j,number,flag=1; printf("请输入要删除数据的编号:"); scanf("%d",&number); for(i=0;i<*count&&flag;i++) { if(GuestList[i].number==number) { for(j=i;j<*count-1;j++) GuestList[j]=GuestList[j+1]; flag=0; (*count)--; } else printf("没有查询到可以删除的数据!!"); }}void Show(int count){ int i; printf("\n"); printf("编号 姓名 人数 用餐时间\n"); for(i=0;i<count;i++) { printf("%10d",GuestList[i].number); printf("%12s",GuestList[i].name); printf("%10d",GuestList[i].sum); printf("%12s\n",GuestList[i].time); }}
# include "stdio.h"# include "string.h"# define MaxSize 20struct guest_info{ char name[8]; int sum; char time[10]; int number;}GuestList[MaxSize];void Insert(int *);void Search(int );void Update(int );void Delete(int *);void Show(int );int main(){int i;int count=0;do{ printf("\n");printf("1---插入(Insert)\n");printf("2---查询(Search)\n");printf("3---修改(Update)\n");printf("4---删除(Delete)\n");printf("5---显示(Show)\n");printf("6---退出(Exit)\n");scanf("%d",&i); switch(i) { case 1:Insert(&count); break; case 2:Search(count); break; case 3:Update(count); break; case 4:Delete(&count); break; case 5:Show(count); break; case 6:break; default:printf("错误选择!请重选");break;}}while(i!=6);return 0;}void Insert(int * count){int i, in_number;if(*count==MaxSize){printf("空间已满!");return;} printf("请输入编号:"); scanf("%d",&in_number); for(i=* count;i<* count+1;i++) { if(GuestList[i].number==in_number) {printf("已经有相同的编号:");return;} GuestList[i].number=in_number; printf("请输入姓名:"); scanf("%s",GuestList[i].name); printf("请输入人数:"); scanf("%d",&GuestList[i].sum);//丢了取地址符 printf("请输入用餐时间:"); scanf("%s",GuestList[i].time); } ( * count)++; }void Search(int count){int i,number,flag=1;printf("请输入要查询的编号:");scanf("%d",&number);for(i=0;i<=count&&flag;i++)if(GuestList[i].number==number){ printf("姓名:%s",GuestList[i].name); printf("人数:%d",GuestList[i].sum); printf("用餐时间:%s",GuestList[i].time); flag=0;}elseprintf("没有查询到!!");}void Update(int count){int i,number,flag=1;printf("请输入要修改数据的编号:");scanf("%d",&number);for(i=0;i<=count&&flag;i++)if(GuestList[i].number==number){ printf("请输入人数:"); scanf("%d",&GuestList[i].sum); printf("请输入用餐时间:"); scanf("%s",GuestList[i].time); flag=0;}elseprintf("没有查询到可以修改的数据!!");}void Delete(int *count){ int i,j,number,flag=1; printf("请输入要删除数据的编号:"); scanf("%d",&number); for(i=0;i<*count&&flag;i++) { if(GuestList[i].number==number) { for(j=i;j<*count-1;j++) GuestList[j]=GuestList[j+1]; flag=0; (*count)--; } else printf("没有查询到可以删除的数据!!"); }}void Show(int count){ int i; printf("\n"); printf("编号 姓名 人数 用餐时间\n"); for(i=0;i<count;i++) { printf("%10d",GuestList[i].number); printf("%12s",GuestList[i].name); printf("%10d",GuestList[i].sum); printf("%12s\n",GuestList[i].time); }}
[解决办法]