这是我最新的修改,但我知道还是有不少问题,麻烦你啦~

#include<stdio.h>structstudent{intnum;floatscore;structstudent*next;};structstudenta,... #include<stdio.h>
struct student
{
int num;
float score;
struct student *next;
};
struct student a,b,c,*head,*p,*p1,*p2;
int main()
{
int m;
a.num=10101;a.score=89.5;
b.num=10103;b.score=90;
c.num=10107;c.score=85;
head=&a;
a.next=&b;
b.next=&c;
c.next=NULL;
p=head;
do
{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}
while(p!=NULL);
printf("请输入一个要删除的号码");
scanf("%d",&m);
p1=head;p2=p1->next;
if(head->num==m) head=p2;
while(p1->num!=m&&p1!=NULL)
{
p2=p1;p1=p1->next;
}
if(p1->num==m&&p1->next!=NULL)
p2->next=p1->next;
else p2->next=NULL;
p=head;
if(head!=NULL)
do
{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}
while(p!=NULL);
return 0;
}
展开
 我来答
kaixingui2012
推荐于2016-04-17 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6551万
展开全部
看一下注释,再试试吧
int main()
{
   int m;
   a.num=10101;a.score=89.5;
   b.num=10103;b.score=90;
   c.num=10107;c.score=85;
   head=&a;
   a.next=&b;
   b.next=&c;
   c.next=NULL;
   p=head;
   while(p!=NULL)//虽然你这里能确保head不是NULL,但从习惯角度出发,这样写才更安全,而do...while();时,若head是NULL,会出现异常。  这句属于吹毛求疵
    {
       printf("%d %5.lf\n",p->num,p->score);
       p=p->next;
    }
   printf("input a number to delete: ");
   scanf("%d",&m);
   p1=head;p2=p1->next;
   while(p1!=NULL && p1->num!=m ) //---应该先判断p1是不是NULL,不然,会出现异常
    {
       p2=p1;p1=p1->next;
    }
   if ( p1==NULL )//----没有找到m时,p1=NULL,这时,什么都不做
       ;
   else if(head->num==m) //如果m在头上,换头结点
       head=p2;
   else
       p2->next=p1->next; //否则,换p2的后继结点
   p=head; //这里在输出前,p要指向head
   while(p!=NULL) //先检查是否为NULL,不是才进入循环
    {
       printf("%d %5.lf\n",p->num,p->score);
       p=p->next;
    }
   return 0;
}
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式