C语言结构数组删除!

#include<stdio.h>structStudent{charname[20];charage[20];intscore;};main(){structStude... #include <stdio.h>
struct Student{
char name[20];
char age[20];
int score;
};
main()
{
struct Student a[3];
int i,j;
char ch[20];
for (i=0;i<3;i++)
{

printf("请输入名字:\n");
gets(a[i].name);
printf("请输入年龄:\n");
gets(a[i].age);
printf("请输入分数:\n");
scanf("%d",&a[i]);
getchar();
}

printf("请输入要删除人的名字:\n");
gets(ch);
for (i=0;i<3;i++)
{
if (strcmp(a[i].name,ch)==1)
{
for (j=i+1;j<3-i;j++)
{
strcpy(a[i].name,a[j].name);
strcpy(a[i].age,a[j].age);
a[i].score=a[j].score;
}
}
}

for (i=0;i<3;i++)
{
puts(a[i].name);
puts(a[i].age);
printf("%d\n",&a[i]);
}
}

删除不了…………
展开
 我来答
哎呀王子
2010-11-18 · TA获得超过646个赞
知道小有建树答主
回答量:195
采纳率:100%
帮助的人:119万
展开全部
对于数组删除,一般就是使用后面数组元素前移的操作,来覆盖前一元素,达到删除的效果。。。。

例如数组a[10],要删除a[5]这个元素,那么只需要把后面的元素前移一位就行了,也就是a[5]=a[6],a[6]=a[7],a[7]=a[8],这样子a[5]这个元素的内容就会被全部抹杀掉了。。。。

不过这里存在一个问题,你一个结构体数组前移的时候,如何判断有多少个元素要前移呢。。。。

所以我的做法是在结构体里面定义一个标示符int flag。。。。

当对这个结构体数组元素赋值时,如a[10].name="KING" 时,那么就是说下标值为10的元素是存在的,赋完值后,来个a[10].flag=1 来标记一下。。。。

这样做的话,我们可以进行这样的删除操作了,如删除下标值为5的元素——
int i=5;
for(int j=i+1;a[j].flag==1;i++,j++)
{
a[i]=a[j];
/* 结构体数组可以直接这样子做,它会自动把a[i]里面的变量等于a[j]里面对应的变量 */
}
a[i].flag=0;
/* 如果你里面原来有10个元素,那么删除了其中一个,那就剩下9个,a[9]那个位置应该为空,一一把里面的元素清空太麻烦,直接把它的标示符flag等于0,就表示该位置为空的 */
百度网友b452582
2010-11-18 · TA获得超过2581个赞
知道小有建树答主
回答量:953
采纳率:100%
帮助的人:332万
展开全部
删除操作错了吧!
你怎么把所的记录都复制到同一个记录 i 当中了。
后续的每个记录应该是全部向前一个啊,就是:
j=i; 之后 把记录j+1移动到j就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式