#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int id;
int score;
struct node *next;
}LinkList;
LinkList *create(){
LinkList *head ,*p;
int id;
int score;
p=(LinkList *)malloc(sizeof(LinkList));
head=p;
p->next=NULL;
printf("请输入学号和成绩:\n");
scanf("%d%d",&id,&score);
while(id!=0){
p->id=id;
p->score=score;
p->next=NULL;
scanf("%d%d",&id,&score);
}
return head;
}
void print(LinkList *head){
LinkList *p;
p=head->next;
while(p!=NULL)
printf("%d%d",p->id,p->score);
p=p->next;
}
main(){
LinkList *head;
create();
print(head);
}
凡写了注释的行,是改动了的行。
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int id;
int score;
struct node* next;
}LinkList;
LinkList* create() {
LinkList* head, * p;
int id;
int score;
p = (LinkList*)malloc(sizeof(LinkList));
head = p;
p->next = NULL;
printf("请输入学号和成绩:\n");
scanf_s("%d %d", &id, &score); //%d%d改为%d %d,输入的时候两个书中间加一个空格
while (id != 0) {
p->id = id;
p->score = score;
p->next = NULL;
scanf_s("%d %d", &id, &score); //同上%d%d改为%d %d
}
return head;
}
void print(LinkList* head) {
LinkList* p;
p = head;
while (p != NULL) { //按照create()的写法,头节点head是有数据的,因此头节点也需要打印
printf("%d %d", p->id, p->score);
p = p->next; //并且p==NULL时,不应该再p = p->next,因此这句放到循环中
} //循环
}
int main() { //main函数也需要返回类型,加int
LinkList* head = nullptr; //指针初始化一下
head = create(); //按create()的写法,将返回头节点,因此head = create();
print(head);
return 0; //为main 返回一个0,
}