当我打印出一个特定的双精度值时,它返回一个零。我打印函数中的值,它打印正确的值。但是,如果我在main中打印它,它会给我一个零。
Main:
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;
}有没有人能帮我找到正确的方向,找到我做错的地方?
发布于 2015-01-26 07:36:32
您可能需要一个main可以看到的median原型。
发布于 2015-01-26 07:39:19
除非您在作用域中有median()的声明,否则编译器将假定它返回一个int,并且当它将“假定的int”转换为double时,事情就会变得混乱(或变为零)。不过,C99和C11要求在使用函数之前声明该函数。
因此,您需要:
extern double median(double array[], int length); // Prototype
extern double median(); // Declaration或在调用median()之前在作用域中具有相同的值。请注意,第二个声明不是原型;它只是使用返回double的不确定(但不可变)参数列表声明一个函数。
我从一条注释中看到,您已经在头文件中声明了函数。您没有显示标题内容(或标题的相关子部分),也没有在使用函数之前显示或声明包含标题。还应在定义函数之前包括标头,以便标头在使用函数时对定义进行交叉检查。您需要完整的原型,而不仅仅是函数声明,才能从交叉检查中获得全部好处。
https://stackoverflow.com/questions/28142855
复制相似问题