用键盘和他们的标记介绍一些学生

时间:2018-12-20 23:25:09

标签: c

我需要介绍一个编号。的学生,他们的姓名,姓氏和分数(3分)。必须对分数进行平均,然后再将通过的分数按插入的相反顺序显示。问题是,例如,我有3个学生,我需要在结构中引入4次才能显示给我结果,我需要一个接一个,而不是空格或其他东西。有人可以帮助我吗?谢谢!

#include <stdio.h>
#include <stdlib.h>
 struct students
    {
        char name[100];
        char surname[100];
        float a,b,c;
    };
int main()
{
int n,i,j;
scanf("%d",&n);
struct students s[n];
    for(i=1;i<=n;i++)
    {
       scanf("\n%s %s %f %f %f\n",s[i].name,s[i].surname,&s[i].a,&s[i].b,&s[i].c);

    }
    for(j=n;j>=1;j--)
    {
    float m;
    m=(s[j].a+s[j].b+s[j].c)/3;
    if(s[j].a >= 5 && s[j].b >= 5 && s[j].c >= 5 && m >= 6)
       {
       printf("%s %s %.2f\n", s[j].name, s[j].surname, m);
       }
     }
 return 0;
 }

Example of desired output

1 个答案:

答案 0 :(得分:0)

问题是您有一个结构数组,并且索引错误。

给定n = 3,则有一个数组,由3个索引为0、1和2的结构组成。

首先,您需要将循环的结构读取更改为此

for(i=0;i<n;i++) {
    scanf("\n%s %s %f %f %f\n",s[i].name,s[i].surname,&s[i].a,&s[i].b,&s[i].c); }

对于下一个for循环,您需要将其更改为此

for(j=n - 1;j>=0;j--)

希望这会有所帮助