c语言链表输出错误,C语言创立链表时录入信息时,出现如图的错误.

谢谢! 还有个问题 闹腾一天了还没弄好

# include

# include

# include

typedef struct Studen

{

char name[10];

char sex[10];

float result;

struct Studen * pNext;

}NODE, * PNODE;

// 函数申明

PNODE create_list(void);  // 创造一个链表

void ergodic_list(PNODE); // 遍历输入链表内容

void sort(PNODE);        // 对链表内容进行排序

//主函数

int main(void)

{

PNODE pHead = NULL;

pHead = create_list(); // 创造链表

sort(pHead);   // 对链表内容进行排序

ergodic_list(pHead);  // 遍历输入链表内容

return 0;

}

// 创造链表

PNODE create_list(void)

{

int i;

int len;

PNODE pHead = (PNODE)malloc (sizeof(NODE)); // 创造链表首节点

if (NULL == pHead)

{

printf ("分配内存失败,请与程序员联系,程序终止!\n");

exit(-1);

}

PNODE pTail = pHead;

pTail->pNext = NULL;

printf ("请输入学生个数: ");

scanf ("%d", &len);

printf ("\n");

for (i=0; i

{

PNODE pNew = (PNODE)malloc (sizeof(NODE));

if (NULL == pNew)

{

printf ("分配内存失败,请与程序员联系,程序终止!\n");

exit(-1);

}

printf ("请输入第%d个学生的信息:\n", i+1);

printf (" 姓名: ");

scanf ("%s",  pNew->name);

printf (" 性别: ");

scanf ("%s", pNew->sex);

printf (" 成绩: ");

scanf ("%f", &pNew->result);  // 第50行

pTail->pNext = pNew;

pNew->pNext = NULL;

pTail = pNew;

printf ("\n");

}

printf ("\n");

return pHead;

}

//遍历输出函数

void ergodic_list(PNODE pHead)

{

PNODE p = pHead->pNext;

int i =0;

while (NULL != p)

{

++i;

printf ("第%d名学生信息:\n ", i);

printf ("名字: %s\n", p->name);

printf (" 性别: %s\n", p->sex);

printf (" 成绩: %f\n", p->result);

p = p->pNext;

printf ("\n");

}

printf ("\n");

return;

}

// 对链表进行排序

void sort(PNODE pHead)

{

int len = 0;

PNODE p = pHead->pNext;

while (NULL != p)

{

++len;

p = p->pNext;

}

int i, j;

float t;

PNODE q = p->pNext;

for (i=0, p = pHead->pNext; ipNext)

{

for (j=i+1, q = p->pNext; jpNext)

{

if (p->result < q->result)

{

t = p->result;          // 200行

p->result = q->result;

q->result = t;

}

}

}

return;

}

这个程序第200行  排序的地方 只对 p->result 这个数据进行了排序  整个结构体中的数据域还有char name; char sxe; 怎么样才能让整个结构体和原录入的时候一样进行排序输出.  我做的这个是按学生成绩排序,然后按成绩排名之后输出, 但是现在只移动了成绩  名字和性别没有和成绩一起移动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值