循环未超出预期结果

时间:2019-07-13 15:15:04

标签: c sorting

我试图制作一个循环,在该循环中输入30个或更少的学生GPA并得到:平均gpa,最高和最低gpa,调整后的平均值,查看是否输入了特定的gpa并显示数组的内容。但是运行代码时,我只能输入一个gpa ...

#include <stdio.h>
#include <stdlib.h>

#define GPA_COUNT 30

main(){
    int gpa [GPA_COUNT];
    int total = 0, i;
    double average;

    for(i = 0; i < GPA_COUNT; i++){
        printf("Enter student %i's GPA: \n", i + 1);
            scanf("%i", &gpa[i]);
    }
    for(i = 0; i < GPA_COUNT; i++){
        total += gpa[i];


    if(gpa[i] > 2.0){
        printf("You need to study harder! \n");
    }
    else if(gpa[i] < 3.5){
        printf("Nice work! \n");
    }
}

    average = (double)total / GPA_COUNT;

    printf("The average GPA is: %.2lf \n", average);
    system("pause");
}

我希望能够输入其余的gpa。

1 个答案:

答案 0 :(得分:0)

正如Antii Haapala在他的评论中所说,您的问题是您已将gpa初始化为一个整数,并使用printf来扫描一个整数-但实际上是输入了一个双精度数。

要解决此问题,您只需要期望加倍即可:

double gpa [GPA_COUNT];
// -- snip --
scanf("%lf", &gpa[i]);

我假设您是一名学生,所以这里有一些其他说明可帮助您改进代码:

  • 在检查学生的GPA时查看您的条件(如果学生获得1.0或4.0,该怎么办?)
  • 您可以从此行(\n中删除printf("Enter student %i's GPA: \n" i + 1);,以使输入位于同一行。
  • 请考虑一下,如果有人在您的程序中抛出垃圾输入,将会发生什么情况–清理用户输入很重要!一种更安全但仍然简单的方法是将用户输入读取为字符串,然后尝试使用类似strtod的方式转换输入。