我想知道是否有人可以告诉我我在代码中做错了什么,它可以编译,但是信息被弄乱了。我是新手,所以我缺少寻找问题所需的知识。谢谢!
#include<stdlib.h>
#include<stdio.h>
const int students = 4;
const int grades = 3;
float averages = 0;
float calculatingGrade(float studentGrade[students][grades])
{
double averages[students];
int i=0,j=0;
for(i=0; i < students; i++){
printf("Enter student#%d's grades:\n",i+1);
for(j=0; j < grades; j++){
scanf("%f",&studentGrade[i][j]);
}
}
for(i=0; i < students; i++){
for(j=0; j < grades; j++){
averages[i] += (studentGrade[i][j]);
}
averages[i] = averages[i] / grades;
printf("\nStudent#%d's average: %.2f ",i+1,averages[i]);
averages[i] = 0;
}
return;
}
void main()
{
float studentGrade[students][grades];
printf("Hello! This is a grade average calculator, enter up to 3 marks per student...\n\n\n");
system("PAUSE");
system("CLS");
calculatingGrade(*studentGrade);
return 0;
}
答案 0 :(得分:0)
如果将数组传递给函数,则必须像这样传递它
Students
并且不能首先取消引用它。
在函数calculatingGrade(studentGrade);
中,您正在阴影变量calculatingGrade
,但没有对其进行初始化。如果调高了编译器的警告级别,则应警告您使用未初始化的变量。您还声明了该函数以返回averages
,但应返回float
,因为它不返回任何内容。
这应该有效:
void
答案 1 :(得分:0)
这里有两个主要问题。
首先,您打错了calculatingGrade
:
calculatingGrade(*studentGrade);
通过取消引用数组,可以在函数需要float[3]
时传递类型为float[4][3]
的参数。删除取消引用:
calculatingGrade(studentGrade);
第二,您正在向averages[i]
添加值,但从未提供初始值。这意味着起始值是不确定的,因此它可以是0或其他某个随机值。这就是为什么您看到随机结果的原因。
在内部循环之前将其设置为0:
for(i=0; i < students; i++){
averages[i] = 0;
for(j=0; j < grades; j++){
averages[i] += (studentGrade[i][j]);
}
...
除了这两点之外,main
应该始终返回int
,而calculatingGrade
应该返回void
,因为您没有返回任何值。