#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int ID;
char name[20];
int score1;
int score2;
int score3;
int total;
struct LNode *next;
}LNode,*LinkList;
LinkList Creat(LinkList T,int n);
void Delete(LinkList T);
void Inquiry(LinkList T);
void Insert(LinkList T,int n);
void Insert(LinkList T,int n)
{
int i;
LNode *r=T,*p;
while((r->next)!=NULL)
{
r=r->next;
}
for(i=0;i<n;i++)
{
p=(LNode *)malloc(sizeof(LNode));
printf("请输入学生学号:");
scanf("%d",&p->ID);
printf("请输入学生姓名: ");
scanf("%s",p->name);
printf("请输入语文成绩: ");
scanf("%d",&p->score1);
printf("请输入数学成绩: ");
scanf("%d",&p->score2);
printf("请输入英语成绩: ");
scanf("%d",&p->score3);
p->total=p->score1+p->score2+p->score3;
printf("总成绩为 %d\n",p->total);
p->next=NULL;
r->next=p;
r=p;
}
printf("\n插入成功!");
}
void Inquiry(LinkList T)
{
int id;
printf("请输入想查询的学生学号: ");
scanf("%d",&id);
LNode *p=T;
p=p->next;
while(p!=NULL)
{
if(p->ID==id)
{
printf("\n学生成绩成功查询!\n");
printf("学号: %d\n姓名: %s\n语文成绩: %d\n数学成绩: %d\n英语成绩: %d\n",p->ID,p->name,p->score1,p->score2,p->score3);
break;
}
else
{
p=p->next;
}
}
if(!p)
printf("对不起,没有查询到学生成绩信息!");
}
void Delete(LinkList T)
{
int id,flag=1;
printf("请输入想要删除的学生的学号: ");
scanf("%d",&id);
LNode *p=T;
//LNode *q;
while((p->next)!=NULL)
{
if(p->next->ID==id)
{
//q=p->next;
p->next=p->next->next;
// delete q;
printf("\n学生成绩信息已成功删除!\n");
flag=0;
break;
}
else
{
p=p->next;
}
}
if(flag)
printf("对不起!删除失败");
}
LinkList Creat(LinkList T,int n)
{
LNode *p,*r;
int i;
T=(LNode *)malloc(sizeof(LNode));
T->next=NULL;
r=T;
for(i=0;i<n;i++)
{
p=(LNode *)malloc(sizeof(LNode));
printf("请输入学生学号:");
scanf("%d",&p->ID);
printf("请输入学生 姓名: ");
scanf("%s",p->name);
printf("请输入语文成绩: ");
scanf("%d",&p->score1);
printf("请输入数学成绩: ");
scanf("%d",&p->score2);
printf("请输入英语成绩: ");
scanf("%d",&p->score3);
p->total=p->score1+p->score2+p->score3;
printf("总成绩为%d\n",p->total);
p->next=NULL;
r->next=p;
r=p;
}
return T;
}
int main()
{
LNode *p;
int n;
while(1)
{
printf(" 学生成绩管理系统\n\n");
printf(" 1-查询学生成绩信息\n");
printf(" 2-插入学生成绩信息\n");
printf(" 3-删除学生成绩信息\n");
printf(" 0-退出系统\n\n");
printf("P请输入数字(0-4):");
int choice;
scanf("%d",&choice);
if(choice==0)
exit(0);
switch(choice)
{
case 1:printf("请输入想要查询的人数: ");
scanf("%d",&n);
int i=0;while(i<n){Inquiry(p);i++;}
break;
case 2:printf("请输入想要插入成绩的人数: ");
scanf("%d",&n);Insert(p,n);
break;
case 3:printf("请输入想要删除成绩的人数: ");
scanf("%d",&n);
i=0;while(i<n){Delete(p);i++;}
break;
default:break;
}
}
return 0;
}
代码如下,求助各位前辈
救救孩子吧
你的指针p没有创建对象啊,你debug的话就可以看到main的p的内容都会自动生成,调几次next最后指向一个会引起段错误的地方。你手动让p指向null就可以了