新手在用链表输出学生信息时遇到的问题,求助大家!
我在输出学生信息的时候发现,只有最后一排数据元素输出了,前面的都是乱码,真的不知道是怎么回事...希望路过的大神能教教我还有那个insert function好像也有问题,能帮我看看吗?谢谢啦
程序代码:
#include<stdio.h> #include<string.h> #define ERROR 0 #define OK 1 typedef struct Student { char no[4]; char name[8]; int price; }Student; typedef struct Lnode { Student data; struct Lnode *next; }Lnode, *LinkList; int i, j; int InitList(LinkList * addr_L) { *addr_L=(LinkList)malloc(sizeof(Lnode)); if (!(*addr_L)) return -2; (*addr_L)->next= NULL; return OK; } int CreateList(LinkList *L,Student e,int n)//创建链表 { LinkList p; *L = (LinkList)malloc(sizeof(Lnode)); (*L)->next = NULL; Lnode *r; r = L; for (j = 0; j<n; j++) { p = (LinkList)malloc(sizeof(Lnode)); scanf("%s %s %d",p->data.no,p->data.name,&p->data.price); e = p->data; p->next = NULL; r->next = p; } return OK; } /*void OutList(LinkList L,int n)//逐个显示表中的元素 { Lnode *p; p=L; j=0; while(p&&j<n) { printf("%s %s %d\n",p->data.no,p->data.name,p->data.price); p=p->next; ++j; } return OK; }*/ void DisplayElem(LinkList L)//逐个显示表中的元素 { Lnode *p=L; while (p!=NULL) { printf("%s %s %d\n", p->data.no, p->data.name, p->data.price); p = p->next; } return 0; } int Insert() { LinkList L; LinkList p,pre;// p=L; LinkList s; s=(LinkList)malloc(sizeof(struct Lnode)); struct Student NewElement; printf("请输入学生学号,姓名,成绩:"); scanf("%s %s %d", NewElement.no,NewElement.name,&NewElement.price); s->data=NewElement; s->next=NULL; if(L->data.no==-1) { L->data=NewElement; return 0; } int i; for (i = 0; p!=NULL; i++) { if (p->data.no > s->data.no) break; pre=p; p=p->next; } if(p==L) { s->next=L; L=s; } else if(p==NULL) { pre->next=s; } else { pre->next=s; s->next=p; } return 0; } int main() { int choice,k,i; Student e; LinkList L; printf("\n********************************\n\n"); puts("1. 构造顺序表并录入学生信息"); puts("2. 显示学生信息"); puts("3. 插入学生信息"); puts("0. 退出"); printf("\n********************************\n\n"); while(1) { puts("请选择:"); scanf("%d",&choice); if(choice==0) break; switch(choice) { case 1: if (InitList(&L)) printf("初始化链表成功\n"); else printf("初始化链表失败\n"); printf("请输入学生个数:\n"); scanf("%d", &k); printf("请输入学生信息:学号 姓名 成绩\n"); if (CreateList(L,e,k)) printf("创建成功\n"); else printf("创建失败\n"); break; case 2: printf("输出每个同学的成绩:\n"); DisplayElem(L); break; case 3: if (Insert(L)) printf("插入成功\n"); else printf("插入失败\n"); break; } } printf("\n\n谢谢您的使用,请按任意键退出\n\n\n"); system("pause"); return 0; return 0; }
测试图如下: