代碼如下:
#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);
}
前面運行出來都是對的,就只有最後修改的那個函數有問題,麻煩幫忙看一下,謝謝!
int ModifyList(LinkList &L,int Chinese,int Math,int English)
{
LinkList p=L->next;
char changename[3];
printf("請輸入需要修改的學生的姓名:");
scanf("%s",changename);
for(; p ! = NULL ; p=p->next)
{
//strcmp返回0代表兩個字符串相同
if(strcmp(changename,p->name)==0)
{
p->s[0].score=Chinese;
p->s[1].score=Math;
p->s[2].score=English;
return OK;
}
}
return ERROR;
}//修改某生成績