当我打印出特定的double时,它返回零。我在函数中打印值并打印正确的值。但是如果我在我的主打印它,它给我一个零。
主:
double med = median(array, counter);
printf("The median is %.0lf\n", med);
功能:
double median(double array[], int length) {
double med = 0;
if(length % 2 != 0) {
med = array[(length-1)/2];
}
else {
double medTot = array[length/2] + array[(length/2)-1];
printf("%.0f\n", medTot);
med = (medTot/2);
printf("%.0f\n", med);
}
return med;
}
有人可以帮助我朝着正确的方向前进吗?
答案 0 :(得分:4)
您可能需要median
可以看到main
的原型。
答案 1 :(得分:3)
除非你在范围内有median()
声明,否则编译器会假定它返回int
,并且当它转换为假设int
'进入double
,事情变得混乱(或为零)。但是,C99和C11要求在使用之前声明函数。
所以,你需要:
extern double median(double array[], int length); // Prototype
extern double median(); // Declaration
在致电median()
之前,或同等范围。请注意,第二个声明不是原型;它只是声明一个带有不确定(但不是可变参数)参数列表的函数,该列表返回double
。
我从评论中看到你已在标题中声明了该函数。您尚未显示标题内容(或标题的相关子部分),也未显示或声明在使用该函数之前包含标题。您还应该在定义函数之前包含标头,以便标头使用该函数交叉检查定义。而且你需要完整的原型,而不仅仅是函数声明,才能从交叉检查中获得全部好处。