【发布时间】:2022-11-14 21:00:14
【问题描述】:
我正在编写一个 C 程序来获取五个科目的分数,计算平均分数并关联一个等级。
在扫描对象时,我注意到了意想不到的行为;扫描到的 score 整数变量存储的是整数的内存地址,而不是整数值的值。
例如,当从标准输入扫描 95,然后立即打印它时,我的程序会打印出 32859 的值。
我不确定这个错误的原因是什么,并认为这可能与我在 for 循环中使用 scanf() 的事实有关。如果您对如何解决我的问题有任何想法,请告诉我。任何提示都有帮助!
#define SUBJECTS 5
#include <stdio.h>
char * find_grade(float);
int main()
{
int subject_score_sum;
// Scan in the subjects
for (int count = 0; count < SUBJECTS; count++)
{
int score;
scanf("%d", &score);
printf("%d\n", score);
subject_score_sum += score;
printf("%d\n", subject_score_sum);
}
float average_score = ((float)subject_score_sum / (float)SUBJECTS);
printf("Average = %.2f\n%s\n", average_score, find_grade(average_score));
return 0;
}
char * find_grade(float average_score)
{
if(average_score >= 90)
{
return "Grade A";
}
else if(average_score >= 80)
{
return "Grade B";
}
else if(average_score >= 70)
{
return "Grade C";
}
else if(average_score >= 60)
{
return "Grade D";
}
else if(average_score >= 40)
{
return "Grade E";
}
else
{
return "Grade F";
}
}
【问题讨论】:
-
较大的值并不意味着它是一个地址。
-
“例如,当从标准输入扫描 95,然后立即打印时,我的程序会打印出 32859 的值。”无法重现。当我运行您的程序时,它会打印输入的值和未初始化的总和变量的值(+ 输入值的总和)。
-
“例如,当从标准输入扫描 95,然后立即打印时,我的程序会打印出 32859 的值。”我不相信你。