函数代码如下,在代码运行后,每次输入到第二个学生后就会自动跳出,只会记录一个学生,运行的效果如下他截图。
score *creatlink()
{
score *head;
score *p1, *p2, *p3, *max;
int i, j;
float fen;
char t[10];
n = 0;
p1 = p2 = p3 = (score *)malloc(LEN);
head = p3; //开辟新单元
printf("请输入学生资料,输入0退出!\n");
repeat1: printf("请输入学生学号(学号应该大于0):");
scanf("%d", &p1->number);
//判断学生输入的学号是否小于0
while (p1->number < 0)
{
getchar();
printf("输入错误,请重新输入学生学号:");
scanf("%d", &p1->number);
}
//学号为0时直接转到结尾,链表结束
if (p1->number == 0)
goto end;
else
{
p3 = head;
if (n > 0)
{
for (i = 0; i < n; i++)
{
if (p1->number != p3->number)
p3 = p3->next;
else
{
//学号如果已经存在,程序报错,返回前面,重新输入
printf("学号重复,请重新输入!\n");
goto repeat1;
}
}
}
}
//输入学生姓名
printf("请输入学生姓名:");
scanf("%s", p1->name);
//输入学生语文成绩及作出判断
printf("请输入学生的语文成绩(0~100):");
scanf("%f", &p1->chinese);
while (p1->chinese <0 || p1->chinese >100)
{
getchar();
printf("输入错误,请重新输入语文成绩:");
scanf("%f", &p1->chinese);
}
//输入学生数学成绩及作出判断
printf("请输入学生的数学成绩(0~100)");
scanf("%f", &p1->mathmatic);
while (p1->mathmatic < 0 || p1->mathmatic > 100)
{
getchar();
printf("输入错误,请重新输入数学成绩:");
scanf("%f", &p1->mathmatic);
}
//输入英语成绩并作出判断
printf("请输入学生的英语成绩(0~100):");
scanf("%f", &p1->english);
while (p1->english < 0 || p1->english > 100)
{
getchar();
printf("输入错误,请重新输入英语的成绩:");
scanf("%f", p1->english);
}
head = NULL;
while (p1->number != 0)
{
n += 1;
if (n == 1)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = (score *)malloc(LEN);
printf("请输入学生资料,输入0退出!\n");
repeat2:printf("请输入学生学号(学号应该大于0):");
scanf("%d", &p1->number);
//判断学生输入的学号是否小于0
while (p1->number < 0)
{
getchar();
printf("输入错误,请重新输入学生学号:");
scanf("%d", &p1->number);
}
//学号为0时直接转到结尾,链表结束
if (p1->number == 0)
goto end;
else
{
p3 = head;
if (n > 0)
{
for (i = 0; i < n; i++)
{
if (p1->number != p3->number)
p3 = p3->next;
else
{
//学号如果已经存在,程序报错,返回前面,重新输入
printf("学号重复,请重新输入!\n");
goto repeat2;
}
}
}
}
//输入学生姓名
printf("请输入学生姓名:");
scanf("%s", p1->name);
//输入学生语文成绩及作出判断
printf("请输入学生的语文成绩(0~100):");
scanf("%f", &p1->chinese);
while (p1->chinese <0 || p1->chinese >100)
{
getchar();
printf("输入错误,请重新输入语文成绩:");
scanf("%f", &p1->chinese);
}
//输入学生数学成绩及作出判断
printf("请输入学生的数学成绩(0~100)");
scanf("%f", &p1->mathmatic);
while (p1->mathmatic < 0 || p1->mathmatic > 100)
{
getchar();
printf("输入错误,请重新输入数学成绩:");
scanf("%f", &p1->mathmatic);
}
//输入英语成绩并作出判断
printf("请输入学生的英语成绩(0~100):");
scanf("%f", &p1->english);
while (p1->english < 0 || p1->english > 100)
{
getchar();
printf("输入错误,请重新输入英语的成绩:");
scanf("%f", p1->english);
}
end: p1 = head;
p3 = p1;
for (i = 1; i < n; i++)
{
for (j = i + 1; j <= n; j++)
{
max = p1;
p1 = p1->next;
if (max->number > p1->number)
{
k = max->number;
max->number = p1->number;
p1->number = k;
strcpy(t, max->name);
strcpy(max->name, p1->name);
strcpy(p1->name, t);
fen = max->chinese;
max->chinese = p1->chinese;
p1->chinese = fen;
fen = max->mathmatic;
max->mathmatic = p1->mathmatic;
p1->mathmatic = fen;
fen = max->english;
max->english = p1->english;
p1->english = fen;
}
}
max = head;
p1 = head;
}
p2->next = NULL;
printf("输入学生的个数为:%d个!\n", n);
return (head);
}
}