马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
各位好心的鱼友们,麻烦帮我解决下这个问题。
编译通过,但测试出错。
#include <stdio.h>
#include <stdlib.h>
struct student
{
int num;
char name[20];
int score;
struct student *next;
};
struct student *input(struct student *q) /* 输入一个学生的信息,并返回节点指针 */
{
printf("Please input one student's information.\n");
scanf("%d %s %d\n", &q->num, q->name, &q->score);
return q;
}
void print(struct student *q) /* 打印所有学生的信息 */
{
if(NULL != q)
{
printf("%d %s %d\n", q->num, q->name, q->score);
q = q->next;
}
}
int main()
{
static int n = 0;
struct student *p1, *p2, *head = NULL;
p2 = p1 = (struct student *)malloc(sizeof(struct student));
while(0 != p1->num) /* 如果输入的num为0,则建立链表完成 */
{
n += 1;
if(1 == n)
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1; /* 把p2移到表尾 */
p1 = (struct student *)malloc(sizeof(struct student));
p1 = input(p1);
}
print(head);
printf("Hello world!\n");
return 0;
}
1.scanf("%d %s %d\n", &q->num, q->name, &q->score);最好把最后的\n去掉不然每次都要多输一个数据才会重新开始输入,而且每次必须输入满3个数据才能返回,这块可以自己改良下
2.你每次分配内存后都没有将next指针指向NULL
3.你n==1的时候你的p1指针指向的是一个没有赋值的结构体,等到变成2的时候 p1指针才指向一个赋值完的结构体,所以此时head指向的next必定是野指针,就是什么都没有指,当访问到的时候,建议每次赋值先把next指向NULL,n++放到赋值之后好一点,还有其他问题你自己思考下
有问题可以继续提问
|