最近几天我一直在努力解决这个问题,但没有成功。目标是找到总分、平均分、最低分和最高分并显示它们。
这是我的代码,除了最小值、最大值和等级输入之外的所有内容似乎都有效
// 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/