C语言关于学生管理系统的题,麻烦帮我看看哪里出错了,谢谢!

代码如下:

 #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);
}



前面运行出来都是对的,就只有最后修改的那个函数有问题,麻烦帮忙看一下,谢谢!

2个回答

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;
}//修改某生成绩

太感谢了!!
还想问一下为什么运行的时候名字打英文就是对的,打中文就会错呢?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问