首页 > 解决方案 > 循环没有超出预期的结果

问题描述

我正在尝试创建一个循环,在其中输入 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 的其余部分。

标签: csorting

解决方案


正如 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.

推荐阅读