标题:谁帮我讲解一下这个代码的意义,从for那行开始 (重点在8,9,10,15行) ...
只看楼主
编程了啊
Rank: 2
等 级:论坛游民
威 望:1
帖 子:31
专家分:20
注 册:2013-12-19
结帖率:100%
已结贴  问题点数:20 回复次数:2 
谁帮我讲解一下这个代码的意义,从for那行开始 (重点在8,9,10,15行)
void INSERT()                    //添加函数
{
    struct student *p3,*p4;
    for(;;)
    {   
    for(p3=head;p3->next!=NULL;)
    {  p3=p3->next;}
    p4=p3;
    p4=(struct student *)malloc (LEN);                                    //创建一个新空间
    p3->next=p4;
    printf("号数  姓名  性别  高数  大学英语  C语言\n");
    scanf("%d",&p4->num);
    if(p4->num==0) {p3->next=NULL;break;}
    scanf("%s%s%f%f%f",p4->name,p4->sex,&p4->score[0],&p4->score[1],&p4->score[2]);
    p3=p4;
    p3->next=NULL;
    A++;
    }
    printf("请按任意键返回主菜单.");
    getch();             //等待输入任意健
}



主要是不懂为什么要让p4=p3再让p4=(struct student *)malloc (LEN)    再让scanf后面的p3=p4
搜索更多相关主题的帖子: 大学英语 C语言 空间 姓名 
2014-01-26 18:41
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:20 
p4 = p3这句无意义,可以删去。

for(p3=head;p3->next!=NULL;)
    {  p3=p3->next;}

这个循环是为了找到链表的末尾。它应该放在f(;;)外,没必要每次都从头遍历一遍。

这个函数是向学生信息链表中插入数据结点用的。但组织的不好,除了上面说的,其它逻辑也很冗余。而且最后一个结点的内存没用也没释放。

head和A都用了全局变量,这也不好。A估计是个计数器,保存的是链表的长度。从操作上看,这个链表是有头结点的,但head却是个指针,有点多余。

重剑无锋,大巧不工
2014-01-26 19:03
编程了啊
Rank: 2
等 级:论坛游民
威 望:1
帖 子:31
专家分:20
注 册:2013-12-19
得分:0 
回复 2楼 beyondyf
那scanf下面的p3=p4是什么意思?
2014-01-26 21:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-426879-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.391304 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved