yi_zhangzhi 2015-12-27 04:29 采纳率: 20%
浏览 1563
已采纳

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条回答

  • 似水流年的铁龙 2015-12-27 04:43
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号