函数返回值是结构体类型,找出最高、最低分学生信息

最高分用函数返回值获得,最低分用指针变量获得。
但是最高分、最低分都有可能乱码,甚至两个同时乱码,为什么?
代码如下

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


img

img



m=p=stu[0].sum;最好别这样赋值,不规范
*s=stu[i];这里有明显的错误,s是结构体指针,赋值时要调用相应的成员变量,如:s->sum = stu[ i ] . sum

^0^有用得化,请望采纳哦
 

你的乱码都是学生名字,检查一下你输入学生名字是不是有特殊字符。采用全英文字母试试。