代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
struct Score
{
int score;
}s[3];//课程及对应成绩
typedef struct LNode
{
char name[3];
struct Score s[3];
struct LNode *next;
}LNode,*LinkList;//链表结点
void CreateList(LinkList &L,int n)
{
int i;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i=n;i>0;i--)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
printf("请输入该学生的姓名:\n");
scanf("%s",p->name);
printf("请依次输入该学生语文、数学、英语成绩:(用逗号分隔数据)\n");
scanf("%d,%d,%d",&p->s[0].score,&p->s[1].score,&p->s[2].score);//用逗号分隔数据
p->next=L->next;
L->next=p;
}
}//逆位序建立链表L
int ListDelete(LinkList &L,int i)
{
int j=0;
LinkList p=L;
LinkList q;
while(p->next&&j<i-1)
{
p=p->next;
j++;
}
if(!p->next||j>i-1)
{
return ERROR;
}
q=p->next;
p->next=q->next;
free(q);
return OK;
}//删除第i个学生的信息
int ListInsert(LinkList &L,int i)
{
int j=0;
LinkList p=L;
LinkList a;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i-1)
{
return ERROR;
}
a=(LinkList)malloc(sizeof(LNode));
printf("须增加的学生姓名:");
scanf("%s",a->name);
printf("依次输入该生语文、数学、英语的成绩:(用逗号分隔数据)");
scanf("%d,%d,%d",&a->s[0].score,&a->s[1].score,&a->s[2].score);//逗号分隔数据
a->next=p->next;
p->next=a;
return OK;
}//在第i位插入一名学生的信息
int ModifyList(LinkList &L,int Chinese,int Math,int English)
{
LinkList p=L->next;
char changename[3];
printf("请输入需要修改的学生的姓名:");
scanf("%s",changename);
for(;(strcmp(changename,p->name)==0);p=p->next)
{
p->s[0].score=Chinese;
p->s[1].score=Math;
p->s[2].score=English;
}
return OK;
}//修改某生成绩
int ShowList(LinkList &L)
{
LinkList p=L->next;
while(p!=NULL)
{
printf("%s的语文成绩为:%d数学成绩为:%d英语成绩为:%d\n",p->name,p->s[0].score,p->s[1].score,p->s[2].score);
p=p->next;
}
return OK;
}//输出链表
void main()
{
LinkList L;
int Chinese=99,Math=85,English=70;//修改的学生的成绩
CreateList(L,3);
ShowList(L);
ListInsert(L,2);
ShowList(L);
ListDelete(L,2);
printf("删除后的学生信息:\n");
ShowList(L);
ModifyList(L,Chinese,Math,English);
ShowList(L);
}
前面运行出来都是对的,就只有最后修改的那个函数有问题,麻烦帮忙看一下,谢谢!