我想知道是否有人能告诉我,我的代码做错了什么,它会编译,但在某个地方,信息会被搞砸。我是新来的,所以我缺乏找到问题所需要的知识。谢谢!
#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;
}
发布于 2018-10-30 17:15:48
如果将数组传递给函数,则必须像这样传递它
calculatingGrade(studentGrade);
千万不要先放弃它。
在您的函数calculatingGrade
中,您正在跟踪变量averages
,但没有初始化它。如果您打开编译器的警告级别,它应该警告您使用未初始化的变量。您还声明了这个函数来返回float
,但是它应该是void
,因为它不返回任何东西。
这应该是可行的:
#include<stdlib.h>
#include<stdio.h>
const int students = 4;
const int grades = 3;
void calculatingGrade(float studentGrade[students][grades]) //no return value
{
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++){
averages[i] = 0; //initializing
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]);
}
return;
}
int main() //main should return int
{
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); //pass array correctly
return 0;
}
发布于 2018-10-30 17:25:40
这里有两个主要问题。
首先,您不正确地调用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
,因为您没有返回任何值。
https://stackoverflow.com/questions/53069329
复制相似问题