0

在终端中编译此代码时,我收到一条错误消息:

newfile1.c:17: error: conflicting types for ‘average’
newfile1.c:2: note: previous declaration of ‘average’ was here

我看不出代码有什么问题。有人可以帮我吗?

enter code here
#include<stdio.h>
float average(float);
int main()
{
        float marks[4],avg;
        int i;
        printf("Please enter your marks\n");
        for(i=0;i<=3;i++)
        {
                scanf("%d",&marks[i]);
        }
        avg = average(marks[4]);
        printf("The average marks value is %f",avg);
        return 0;
}



float average(float a[4])
{
       int i,sum;
       float avg_m;
       for(i=0;i<=3;i++)
       {
               sum=sum+a[i];
       }
       avg_m=sum/3;
       return avg_m;
}
4

5 回答 5

9

代替

float average(float);

float average(float[]);

函数声明和定义不匹配。

然后像这样调用函数:

avg = average(marks);

于 2013-03-08T06:47:31.033 回答
2

更改文件中的行

float average(float);

float average(float []);

您已将函数声明为取一个,float而不是您想要的数组floats

另外,在调用它时main,更改为

avg = average(marks);
于 2013-03-08T06:48:52.590 回答
1

在 的原型中average,您给出float了参数类型,因此编译器期望单个浮点值作为参数。如果你想传递一个值数组,你必须像这样声明你的原型:

float average(float input_marks[]);

您不能在原型或定义中给出数组参数的长度。您必须将数组长度作为单独的参数传递。所以你的原型应该看起来像

float average(float a[], int a_length);
于 2013-03-08T06:55:45.810 回答
1
float average(float);

需要一个浮点变量。你需要传递一个数组,所以添加 float average(float[]);. 由于您的函数声明和定义不匹配,因此发生错误。

在你的主要,你应该调用avg = average(marks);将数组传递给函数avg = average(marks[4]);将传递一个变量。

于 2013-03-08T06:48:59.970 回答
0

您的函数average接受一个 float作为参数,因此声明应该是floa avaerage(float). 如果你这样做float average(float a[4]),你是在告诉编译器你的函数需要一个 4 个浮点数的数组作为参数。

于 2013-03-08T06:49:41.847 回答