c语言四个数排序编译不好,这个排序为什么编译通过运行不出来C语言

#include

#include

#include

typedef struct _STU

{

char num[10];

char name[10];

int  s1,s2,s3;

int sall;//S1+S2+S3

struct _STU* pNext;

} STUNODE;

//声明链表的头和尾

STUNODE* g_pHead = NULL;  //O

STUNODE* g_pEnd = NULL;

//排序

void sort();

//清空链表,防止内存泄漏

void freenode()

{

STUNODE* pTemp = g_pHead;

while (g_pHead != NULL)

{

//记录节点

pTemp = g_pHead;

//向后移动了一个

g_pHead = g_pHead->pNext;

//删除节点

free(pTemp);

}

}

//菜单

void Printmnue()

{

printf("1.添加学生数据\n");

printf("3.排序\n");

printf("6.显示学生信息\n");

printf("7.退出\n");

}

//添加学生

void add(char *num,char *name,int s1,int s2,int s3)

{

//创建一个节点

STUNODE* pTemp =(STUNODE*)malloc(sizeof (STUNODE));

//第一步,检验参数的合法性

if (NULL == num || NULL == name || s1 < 0||s2<0||s3<0)

{

printf ("学生信息输入错误!\n");

return ;

}

//节点成员符初始值

strcpy(pTemp->num, num);

strcpy(pTemp->name, name);

pTemp->s1 = s1;

pTemp->s2 = s2;

pTemp->s3 = s3;

pTemp->pNext = NULL;

//接在链表上

if (NULL == g_pHead || NULL == g_pEnd)

{

g_pHead = pTemp;

//g_pEnd = pTemp;

}

else

{

g_pEnd->pNext = pTemp;  //链接

//g_pEnd = pTemp;         //向后移动

}

g_pEnd = pTemp;

}

//显示所有学生

void show()

{        //声明指针

STUNODE* pTemp = g_pHead;

while (pTemp != NULL)//遍历链表

{

printf ("学号:%s\t, 姓名:%s\t, 语文:%d\t, 数学:%d\t, 英语:%d\t\n", pTemp->num, pTemp->name, pTemp->s1, pTemp->s2, pTemp->s3);

//向下走一步

pTemp = pTemp->pNext;

}

}

int main()

{

int choice=-1; //初始化

char num[10] = {'\0'};

char name[10] = {'\0'};

int  s1= -1;

int  s2= -1;

int  s3= -1;

int sum;//=s1+s2+s3;

int flag= 1;

STUNODE* pTemp = NULL;

Printmnue();

while (flag)

{

printf("请输入你的选择(1-7)\n");

scanf("%d", &choice);

switch (choice)

{

case 1:

//尾添加

printf ("输入学号:");

scanf ("%s", num);

printf ("输入姓名:");

scanf ("%s", name);

printf ("输入语文成绩:");

scanf ("%d", &s1);

printf ("输入数学成绩:");

scanf ("%d", &s2);

printf ("输入英语成绩:");

scanf ("%d", &s3);

add(num, name, s1,s2,s3);

break;

case 3:

//排序

sort();

break;

case 6:

//显示所有学生

show();

break;

case 7:

//退出

flag=0;

break;

}

}

//释放链表

freenode();

system("pause");

return 0;

}

//排序

void  sort()

{

STUNODE* pTemp = g_pHead;

char num[10] = {0};

char name[10] = {'\0'};

int s1,s2,s3;

int sum;

STUNODE *p,*q;

for(p=g_pHead;p!=NULL;p=p->pNext)

{

for(q=p;q!=NULL;q=q->pNext)

{

if((q->s1 +q->s2 +q->s3 )pNext->s1 +q->pNext->s2 +q->pNext->s3 ))

{

s1=q->s1 ,q->s1=q->pNext->s1,q->pNext->s1=s1;

s2=q->s2 ,q->s2=q->pNext->s2,q->pNext->s2=s2;

s3=q->s3 ,q->s3=q->pNext->s3,q->pNext->s3=s3;

strcpy(num, q->num );

strcpy(q->num,q->pNext->num );

strcpy(q->pNext->num,num);

strcpy(name, q->name );

strcpy(q->name,q->pNext->name );

strcpy(q->pNext->name,name);

}

}

}

//STUNODE* pTemp = g_pHead;

while (pTemp != NULL)//遍历链表

{

printf ("学号:%s\t, 姓名:%s\t, 英语:%d\t, 计算机:%d\t, 数学:%d\t\n", pTemp->num, pTemp->name, pTemp->s1, pTemp->s2, pTemp->s3);

//向下走一步

pTemp = pTemp->pNext;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值