求助,请问输出函数有什么问题吗?为什么只能输出第二组数据?

/*Q4609.(10分)建立学生成绩管理系统,对学生以下信息: 学号、名字、成绩(语文、数学、外语) 进行管理。要
求利用结构体变量记录每名学生的学号、名字、成绩(语文、数学、外语),并建立单向链表来存放学生的信息。
功能实现要求如下:
(1)写函数Append ()实现使用单链表来添加学生的信息。√
(2)写函数DisLink()输出所有学生的信息。 √
(3)写函数Sort()对学生成绩进行排序。
(4)写DeleteMemory()函数释放链表所占内存空间 √
其中结构体类型定义如下:
struct stu
{
char ID[12];//学号
char name[20];//姓名
int c1;//语文成绩
int c2;//数学成绩
int c3;//英语成绩
struct stu * next;
}
测试用例如下:
1 增加数据
2 退出
选择:1
请输入学号:001
请输入名字:张三
请依次输入语文,数学外语成绩:88 89 90
1 增加数据
2 退出
选择:1
请输入学号:0*/
#include
#include

struct stu

{

char ID[12];//学号 
char name[20];//姓名 
int c1;//语文成绩 
int c2;//数学成绩 
int c3;//英语成绩 
struct stu * next; 

};

struct stu*Append()

{

struct stu*pHead=NULL,*pNew=NULL,*pTail=NULL;
pNew=(struct stu*)malloc(sizeof(struct stu));//给一个stu分配空间! 
int i=0;
int a;
printf("1 增加数据\n");
printf("2 退出\n");
printf("选择");
scanf("%d",&a);
for(i=0;i<100;i++)
{
    if(a==1) 
    {   
    printf("请输入学号:");
    scanf("%s",&pNew->ID);
    printf("请输入名字:");
    scanf("%s",&pNew->name);
    printf("请依次输入语文,数学,外语成绩:");
    scanf("%d%d%d",&pNew->c1,&pNew->c2,&pNew->c3);
    if(pHead==NULL) 
        pHead=pNew;
    else
        pTail->next=pNew;
    pTail=pNew;
    pNew->next=NULL;
    printf("1 增加数据\n");
    printf("2 退出\n");
    printf("选择");
    scanf("%d",&a); 
    getchar();           //吞掉回车,不然的话回车会进入gets.gets直接结束 
    }
    else break; 
 } 
return pHead;       

}

void DisLink(struct stu *pHead)
{
struct stu*p=pHead;
int n=1;
printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n");
while(p!=NULL)

{
    int sum=p->c1+p->c2+p->c3;
    printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,sum);
    p=p->next;
    n++;

}

}

void Sort(struct stu*pHead)

{

int n=0;
struct stu *p,*q,*t;
p=pHead;
for(;p!=NULL;p=p->next)
{
    p->next=q;
    if((p->c1+p->c2+p->c3)>(q->c1+q->c2+q->c3))
    {
        t=p,p=q,q=p;
    }
}

/* printf("排序后\n");
printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n");
while(p!=NULL)
{

    printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,p->c1+p->c2+p->c3);
    p=p->next;
    n++;
}*/ 

}

void DeleteMemory(struct stu* pHead)

{

struct stu *p;
while (NULL != pHead)

{
    p = pHead;
    pHead = pHead->next;
    free(p);  // 下一个节点        free(Pointer);

}

}
int main()

{

struct stu *p;
p=Append();
DisLink(p);
Sort(p);
printf("排序后");
DisLink(p);
DeleteMemory(p);
return 0;

}

1个回答

https://blog.csdn.net/W31415w16/article/details/78330992

自己参考下吧,不高兴看你的代码了,因为你根本不采纳任何回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问