c语言printf浮点错误

c语言printf浮点错误,c,C,我定义了一个查找int数组平均值的函数,函数如下: float MeanInt(int x[],int num){ float mean, sum = 0.0f,res=0.0f; int i; for(i=0;i<num;i++){ sum += (float)(x[i]); printf("x[%d] is %d\n", i,x[i]); printf("sum is %f\n", sum); }

我定义了一个查找int数组平均值的函数,函数如下:

float MeanInt(int x[],int num){
    float mean, sum = 0.0f,res=0.0f;
    int i;
    for(i=0;i<num;i++){
        sum += (float)(x[i]);
        printf("x[%d] is %d\n", i,x[i]);
        printf("sum is %f\n", sum);
    }
    res = sum/((float)(num));
    printf("mean should be %f\n", res);
    return res;
}
我遇到一个错误,说: 格式
%f
要求参数的类型为
double
,但参数2的类型为
int

我完全搞糊涂了,因为函数
MeanInt()
中的
printf()
打印出的结果完全正确。我还在一些玩具示例上测试了
MeanInt()
,它总是正常工作。这个问题只有在我在项目中运行它时才会发生。

在函数第一次调用之前,您没有声明函数
MeanInt
,因此编译器假定
MeanInt
的类型是一个返回
int
的函数,该函数带有任意数量的参数

修复
包括适当的头文件(包含声明),或将定义移到用法上方,或在用法之前声明为:

float MeanInt(int x[],int num);

您可以在文件顶部的全局范围内声明它,也可以在更窄的范围内声明它。

在函数第一次调用之前,您并没有声明函数
MeanInt
,因此编译器假定
MeanInt
的类型是一个返回
int
并带有任意数量参数的函数

修复
包括适当的头文件(包含声明),或将定义移到用法上方,或在用法之前声明为:

float MeanInt(int x[],int num);

您可以在文件顶部的全局范围或更窄的范围内声明它。

您可以让gcc或MSVC使用
-Wall
编译器选项对此进行警告。您可以让gcc或MSVC使用
-Wall
编译器选项对此进行警告。可能重复的