问题描述
- 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英语成绩为:%dn",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;
}//修改某生成绩
解决方案二:
太感谢了!!
还想问一下为什么运行的时候名字打英文就是对的,打中文就会错呢?
时间: 2024-12-10 18:05:51