|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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++放到赋值之后好一点,还有其他问题你自己思考下
有问题可以继续提问
|
|