c - 特定代码的输出不正确。 (最大、最小、等级_扫描仪)

标签 c

最近几天我一直在努力解决这个问题,但没有成功。目标是找到总分、平均分、最低分和最高分并显示它们。

这是我的代码,除了最小值、最大值和等级输入之外的所有内容似乎都有效

// Includes printf and scanf functions
#include <stdio.h>

int main(void) {
    unsigned int counter; // number of grade to be entered next
    int grade; // grade value
    int total; // sum of grades entered by user
    float average; // average of grades
    int maxi; // Max grade
    int mini; // min grade
    int i;
    int max;
    int min;

    maxi = 1;
    mini = 1;

    printf("Enter number of grades: "); // User enters number of grades
    scanf("%d", &counter); // Countss number of grades
    //scanf("%d%d", &min, &max);

    for (i = 1; i <= counter; i++) {
        printf("Enter grade %d: ", i); // User enters grade
        scanf("%d", &grade); // Counts grades
        //scanf("%d",&counter);

        if (grade < 0 || grade > 100) {
            printf("Please enter a number between 0 and 100!\n"); // Lets user know if input is invalid
            i--;
            break;
        }
        else {
            total = total + grade;
            average = (float)total / counter; // NOTE: integer division,    not decimal
        }
    }

    max = (grade < maxi) ? maxi : grade;
    min = (grade > mini) ? mini : grade;

    printf("Class average is: %.3f\n", average); // Displays average
    printf("Your maximum grade is %d\n", max); // Displays Max
    printf("Your minimum grade is %d\n", min); // Displays minimum
    printf("Sum: %d\n", total); // Displays total
}

输出:

Enter number of grades: 2
5
7
Enter grade 1: 4
Enter grade 2: 3
Class average is: 3.500
Your maximum grade is 3
Your minimum grade is 1
Sum: 7

出于某种原因,当我启动程序时,我必须输入一些数字,在本例中是 5 和 7,然后它会提示我“输入成绩”,然后它会从那里计算所有内容。此外,最大值似乎始终是我输入的最后一个等级,并且当输入中没有任何位置为 1 时,最小值显示为 1。我应该为最大值/最小值使用条件运算符,我尝试查找它并读这本书,但他们只使用像 a、b、c 等字母。这让我很困惑,所以我不确定我是否做错了。

难道这就是把一切都搞砸的原因吗?如果不是我做错了什么?

另一件事是,如果我想让计数器有 1-100 的输入,我想我需要一个 While 循环,对吗?

编辑:刚刚意识到我必须删除最大值和最小值的 scanf。这就是为什么我必须先输入 2 个数字

最佳答案

我认为有两个主要问题

  • 变量 total 未初始化,因此第一次出现 total = total + grade; 会调用未定义的行为。

    您必须将其显式初始化为 0

  • 相同的变量 grade 用于保存重复的输入。循环后,grade 将只保留最后输入的值。

    您需要使用数组来存储输入和比较,或者在循环内比较和更新最小值和最大值。

关于c - 特定代码的输出不正确。 (最大、最小、等级_扫描仪),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52499456/

相关文章:

c - 所有者绘制是否仅适用于 ListView 的报告模式?

c - 使用 ASCII 中的十进制索引获取字符

c - 数组比较中的意外行为

c - 连续声明的变量的内存地址顺序是否总是降序?

c - 如何使用按位运算来补充最右边的位以保持前导零位为零?

c - 小写到大写函数 - C

c - 在c中将新节点插入头后,节点的名称是什么?

c - 通过套接字发送哈希表的内容

将数组的一部分复制到 C 中的第二个数组

mysql - 无法更新mysql中的列