首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于构造体

2012-08-15 
关于结构体今晚朋友叫我帮忙查问题,程序是他课本上的例子,由于本人较长时间没接触C语言,调试时报的错误不

关于结构体
今晚朋友叫我帮忙查问题,程序是他课本上的例子,由于本人较长时间没接触C语言,调试时报的错误不知道怎么解决。编译通过,运行时,在插入的那一步会出问题,当输入完人数按回车就会报错:“test1.exe 中的 0x50d16af2 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突”,在此请教各位大侠,附上代码,谢谢。

C/C++ code
# 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);    }}


[解决办法]
只是一个非常小的错误,scanf的时候少了个求地址符 '&'
C/C++ code
# 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);    }} 


[解决办法]

探讨

引用:

只是一个非常小的错误,scanf的时候少了个求地址符 '&amp;amp;'
C/C++ code

# include "stdio.h"
# include "string.h"
# define MaxSize 20
struct guest_info{
char name[8];
int sum;
char time[10];
int ……

[解决办法]
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

热点排行