最高分用函数返回值获得,最低分用指针变量获得。
但是最高分、最低分都有可能乱码,甚至两个同时乱码,为什么?
代码如下
#include<stdio.h>
#define N 2
struct student
{
char name[20];
long num;
float score[3];
float sum;
};
struct student max(struct student [],struct student *,int);
void inputdata(struct student [],int);
int main()
{
struct student st[N],maxst,minst;
inputdata(st,N);
maxst=max(st,&minst,N);
printf("最高分学生信息:\n");
printf("%s %ld %.2f %.2f %.2f %.2f\n",maxst.name,maxst.num,
maxst.score[0],maxst.score[1],maxst.score[2],maxst.sum);
printf("最低分学生信息:\n");
printf("%s % ld %.2f %.2f %.2f %.2f\n",minst.name,minst.num,
minst.score[0],minst.score[1],minst.score[2],minst.sum);
return 0;
}
void inputdata(struct student stu[],int n)
{
int i,j;
for(i=0;i<n;i++)
{
scanf("%s %ld %f %f %f",stu[i].name,&stu[i].num,
&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
}
}
struct student max(struct student stu[],struct student *s,int n)
{
struct student t;
int i;
float m,p;
m=p=stu[0].sum;
for(i=1;i<n;i++)
{
if(m<stu[i].sum)
{
m=stu[i].sum;
t=stu[i];
}
if(p>stu[i].sum)
{
p=stu[i].sum;
*s=stu[i];
}
}
return t;
}
m=p=stu[0].sum;最好别这样赋值,不规范
*s=stu[i];这里有明显的错误,s是结构体指针,赋值时要调用相应的成员变量,如:s->sum = stu[ i ] . sum
^0^有用得化,请望采纳哦
你的乱码都是学生名字,检查一下你输入学生名字是不是有特殊字符。采用全英文字母试试。