别让我逮到 2019-10-14 20:28 采纳率: 0%
浏览 369

C语言实现学生通讯录,查找添加一次可以正常运行,在添加一次不能正常运行(往后添加重复),删除运行时程序直接终止了。求大佬帮帮忙,解决一下问题

#include
#include
#include
typedef struct student{
char name[20];
char number[20];
}ss;
typedef struct ssss{
int size;
ss array;
}Array;
Array acreat (int asize) //开辟空间
{
Array a;
a.size=asize;
a.array=(ss
)malloc(sizeof(ss)*asize);
return a;
}
void afree(Array a) //回收空间
{
free(a->array);
a->array=NULL;
a->size=0;
}
void agrow(Array
a,int moresize) //数组的增长
{
ss p=(ss *)malloc(sizeof(ss)(a->size+moresize));
for(int i=0;isize;i++)
{
p[i]=a->array[i];
}
free(a->array);
a->array=p;
a->size+=moresize;
}
void apaixu(Array a)
{
ss t;
for(int i=0;i<(a->size-1);i++)
{
for(int j=0;j<(a->size-i-1);j++)
{
if(strcmp(a->array[j].name,a->array[j+1].name)>0)
{
t=a->array[j];
a->array[j]=a->array[j+1];
a->array[j+1]=t;
}
}
}
}
void atianjia(char
cname,char cnumber,Array *a)
{
agrow(a,1);
strcpy(a->array[a->size-1].name,cname);
strcpy(a->array[a->size-1].number,cnumber);
apaixu(a);
}
void achazhao(char *cname,Array *a)
{
for(int i=0;isize;i++)
{
int r=strcmp(cname,a->array[i].name);
if(r==0)
{
printf("%s,%s\n",a->array[i].name,a->array[i].number);
break;
}
else if(r!=0&&++i==a->size)
{
printf("查无此人\n");
}
}
}
void ashanchu(char *cname,Array *a)
{
int r;
for(int i=0;isize;i++)
{
r=strcmp(cname,a->array[i].name);
if(r==0&&i<(a->size-1)) //删除首项中间项
{
int g;
for(g=i;gsize-1;g++)
{
a->array[g]=a->array[g+1];
}
// free(&(a->array[g]));
agrow(a,-1);
}
else if(r==0&&i==(a->size-1)) //删除最后一项
{
// free(&a->array[i]);
agrow(a,-1);
}
else if(r!=0&&++i==(a->size))
{
printf("查无此人\n");
}
}
}
void aprint(Array *a)
{
for(int i=0;isize;i++)
{
printf("%s %s\n",a->array[i].name,a->array[i].number);
}
}
int main()
{
Array acreat (int asize); //开辟空间
void afree(Array *a); //回收空间
void agrow(Array
a,int moresize); //数组的增长
// ss *afangwen(Array *a,int index,char); //访问单元
void apaixu(Array *a);
void atianjia(char *cname,char *cnumber,Array *a);
void ashanchu(char *cname,Array *a);
void achazhao(char *cname,Array *a);
void aprint(Array *a);
Array a=acreat(3);
printf("输入姓名电话号:\n");
for(int i=0;i<3;i++)
{
scanf("%s %s",&a.array[i].name,&a.array[i].number);
}
apaixu(&a);
aprint(&a);
while(1)
{
printf("添加按1,删除按2,查找按3,打印按4,结束按-1\n");
int i;
scanf("%d",&i);
if(i==1)
{
printf("输入添加学生姓名电话号:\n");
char name[20],number[20];
scanf("%s %s",&name,&number);
atianjia(name,number,&a);
}
if(i==2)
{
printf("输入删除学生姓名:");
char name[20];
scanf("%s",&name);
ashanchu(name,&a);
}
if(i==3)
{
printf("输入查找学生姓名:");
char name[20];
scanf("%s",&name);
achazhao(name,&a);
}
if(i==4)
{
aprint(&a);
}
if(i==-1)
{
break;
}
}
afree(&a);

return 0;
}

  • 写回答

2条回答 默认 最新

  • zqbnqsdsmd 2019-10-14 21:41
    关注

    ss p=(ss *)malloc(sizeof(ss)(a->size+moresize));
    这里你少了2个星号
    应该是

    ss * p=(ss *)malloc(sizeof(ss)*(a->size+moresize));
    
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序