c语言printf浮点错误
我定义了一个查找int数组平均值的函数,函数如下: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); }
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
编译器选项对此进行警告。可能重复的