C语言题目,我的程序后面的输入为什么会覆盖前面的输入?不能输两学期或者两个班的信息,求教。。。
#include<stdio.h>#include<string.h>#defineN5/*录入成绩的学生人数*/#defineM3/*科目数*/voidInput();...
#include<stdio.h>
#include<string.h>
#define N 5/*录入成绩的学生人数*/
#define M 3/*科目数*/
void Input();/*定义输入成绩的函数*/
void Revise();/*定义修改成绩的函数*/
void Sort();/*定义排序的函数*/
void Search();/*定义查询成绩的函数*/
void Bujige();/*定义输出不及格科目和名单的函数*/
void Output();/*定义按照班级输出成绩单*/
struct student/*定义结构体*/
{
char term[20];/*学期*/
char Class[20];/*班级*/
char name[20];/*学生姓名*/
char number[20];/*学号*/
struct sbject/*定义科目的结构体*/
{
char sname[20];/*科目名称*/
float score;/*科目成绩*/
}sb[M];
double sum;/*每个学生成绩总分*/
float ave;/*每个学生的平均分*/
}stu[N];
void Input()/*函数功能:录入学生的信息*/
{
while(1)
{
char term[20],Class[20];
int b;
printf("请输入要录入的学期:");
scanf("%s",term);
while(1)
{
printf("\n请输入要录入的班级:");
scanf("%s",Class);
while(1)
{ int i,j,s=0;
for(i=0;i<=N;i++)
{
printf("输入第%d个学生的姓名和学号:",i+1);
scanf("%s%s",stu[i].name,stu[i].number);
stu[i].sum=s;
for(j=0;j<M;j++)
{
printf("输入第%d门的名称和分数:",j+1);
scanf("%s%f",stu[i].sb[j].sname,&stu[i].sb[j].score);
stu[i].sum+=stu[i].sb[j].score;
}
stu[i].ave=(float)stu[i].sum/j;
}
strcpy(stu[N].term,term);
strcpy(stu[N].Class,Class);
printf("\n\n是否继续添加学生信息【1--是, 0--不是】\n");
scanf("%d",&b);
break;
}
break;
}
if(b==0)
break;
}
} 展开
#include<string.h>
#define N 5/*录入成绩的学生人数*/
#define M 3/*科目数*/
void Input();/*定义输入成绩的函数*/
void Revise();/*定义修改成绩的函数*/
void Sort();/*定义排序的函数*/
void Search();/*定义查询成绩的函数*/
void Bujige();/*定义输出不及格科目和名单的函数*/
void Output();/*定义按照班级输出成绩单*/
struct student/*定义结构体*/
{
char term[20];/*学期*/
char Class[20];/*班级*/
char name[20];/*学生姓名*/
char number[20];/*学号*/
struct sbject/*定义科目的结构体*/
{
char sname[20];/*科目名称*/
float score;/*科目成绩*/
}sb[M];
double sum;/*每个学生成绩总分*/
float ave;/*每个学生的平均分*/
}stu[N];
void Input()/*函数功能:录入学生的信息*/
{
while(1)
{
char term[20],Class[20];
int b;
printf("请输入要录入的学期:");
scanf("%s",term);
while(1)
{
printf("\n请输入要录入的班级:");
scanf("%s",Class);
while(1)
{ int i,j,s=0;
for(i=0;i<=N;i++)
{
printf("输入第%d个学生的姓名和学号:",i+1);
scanf("%s%s",stu[i].name,stu[i].number);
stu[i].sum=s;
for(j=0;j<M;j++)
{
printf("输入第%d门的名称和分数:",j+1);
scanf("%s%f",stu[i].sb[j].sname,&stu[i].sb[j].score);
stu[i].sum+=stu[i].sb[j].score;
}
stu[i].ave=(float)stu[i].sum/j;
}
strcpy(stu[N].term,term);
strcpy(stu[N].Class,Class);
printf("\n\n是否继续添加学生信息【1--是, 0--不是】\n");
scanf("%d",&b);
break;
}
break;
}
if(b==0)
break;
}
} 展开
3个回答
展开全部
1.stu[N]只能存储一个学期,一个班级,N个学生的信息,
你要想存储一个学期,m班级的信息需定义二维数组:stu[m][N]
你要想存储s个学期,m班级的信息需定义二维数组:stu[s][m][N]
2.你的程序还有个数组越界的问题。stu[N]的下标索引从0开始,到N-1结束。所以程序中
for(i=0;i<=N;i++)错误,应该是for(i=0;i<N;i++)
3.strcpy(stu[N].term,term);和strcpy(stu[N].Class,Class);两句存在数组越界问题。此外,应该每个每个学生都应该进行学期和班级的初始化,而不是只给最后一个学生的学期和班级初始化。
你要想存储一个学期,m班级的信息需定义二维数组:stu[m][N]
你要想存储s个学期,m班级的信息需定义二维数组:stu[s][m][N]
2.你的程序还有个数组越界的问题。stu[N]的下标索引从0开始,到N-1结束。所以程序中
for(i=0;i<=N;i++)错误,应该是for(i=0;i<N;i++)
3.strcpy(stu[N].term,term);和strcpy(stu[N].Class,Class);两句存在数组越界问题。此外,应该每个每个学生都应该进行学期和班级的初始化,而不是只给最后一个学生的学期和班级初始化。
展开全部
1)首先,你只定义了一个stu数组,只能存一个学期的数据。每次循环,都是反复写这个数组。如果需要,你可以定义成二维的stu[3][N],就可以存3个学期的数据。
2)数组好像越界了, for(i=0;i<=N;i++),这里应该是 <,不是<=
2)数组好像越界了, for(i=0;i<=N;i++),这里应该是 <,不是<=
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h> int main(void) { int max (int num1,int num2)后面的代码是不会被执行的. max如果要使用则必须在main前面定义整理后的代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询