c语言输入两行数据就自动结束了

作业题,不知道问题在哪,大家帮我看看

img

代码就这样,输入两行学生数据后就自动结束了


#include <stdio.h>
#include <stdlib.h>
struct S
{
    float s1;
    float s2;
    float s3;
};

struct m
{
    int num;
    char n[20];
    struct S s;
    float a;
};

int main()
{
    struct m a[5],*p=a;
    void inpute(struct m p[]);
    float average(float p1,float p2,float p3,float p4,float p5);
    int max(struct m p[]);
    int k;
    float j;
    printf("请输入学生信息:学号,姓名,成绩1,成绩2,成绩3\n");
    inpute(p);
    printf("总平均分:\n");
    j=average((*p).a,(*(p+1)).a,(*(p+2)).a,(*(p+3)).a,(*(p+4)).a);
    printf("%f",j);
    printf("最高分者:\n");
    k=max(p);
    printf("学号:%d 姓名:%s 科目1:%f 科目2:%f 科目3:%f 平均分:%f\n",(*(p+k)).num,(*(p+k)).n,(*(p+k)).s.s1,(*(p+k)).s.s2,(*(p+k)).s.s3,(*(p+k)).a);
    return 0;
}

void inpute(struct m p[])
{
    int i;
    for(i=0;i<5;i++)
    {
        scanf("%d,%s,%f,%f,%f",p[i].num,p[i].n,p[i].s.s1,p[i].s.s2,p[i].s.s3);
        p[i].a=(p[i].s.s1+p[i].s.s2+p[i].s.s3)/3.0;
    }
}

float average(float p1,float p2,float p3,float p4,float p5)
{
    float p;
    p=p1+p2+p3+p4+p5;
    return p;
}

int max(struct m p[])
{
    int i,k=0;
    for(i=0;i<5;i++)
    {
        if(p[i].a>p[k].a)
            k=i;
    }
    return k;
}

修改处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
struct S
{
    float s1;
    float s2;
    float s3;
};

struct m
{
    int num;
    char n[20];
    struct S s;
    float a;
};

int main()
{
    struct m a[5], * p = a;
    void  inpute(struct m p[]);
    float average(float p1, float p2, float p3, float p4, float p5);
    int max(struct m p[]);
    int k;
    float j;
    printf("请输入学生信息:学号,姓名,成绩1,成绩2,成绩3\n");
    inpute(p);

    printf("总平均分:\n");
    j = average((*p).a, (*(p + 1)).a, (*(p + 2)).a, (*(p + 3)).a, (*(p + 4)).a)/5.0;//修改
    printf("%f\n", j);

    printf("最高分者:\n");
    k = max(p);
    printf("学号:%d 姓名:%s 科目1:%f 科目2:%f 科目3:%f 平均分:%f\n", 
        (*(p + k)).num, (*(p + k)).n, (*(p + k)).s.s1, (*(p + k)).s.s2, (*(p + k)).s.s3, (*(p + k)).a);
    return 0;
}

void inpute(struct m p[])
{
    int i;
    for (i = 0; i < 5; i++)
    {
        scanf("%d%s%f%f%f", &p[i].num, p[i].n, &p[i].s.s1, &p[i].s.s2, &p[i].s.s3);//修改
        //scanf("%d,%s,%f,%f,%f", p[i].num, p[i].n, p[i].s.s1, p[i].s.s2, p[i].s.s3);
        p[i].a = (p[i].s.s1 + p[i].s.s2 + p[i].s.s3) / 3.0;
    }
}

float average(float p1, float p2, float p3, float p4, float p5)
{
    float p;
    p = p1 + p2 + p3 + p4 + p5;
    return p;
}

int max(struct m p[])
{
    int i, k = 0;
    for (i = 0; i < 5; i++)
    {
        if (p[i].a > p[k].a)
            k = i;
    }
    return k;
}

img

1 输入时加逗号了吗
2 p为指针,应像p[i]->num这样使用,后续s结构体用.
3 你代码风格好怪