双返零C

时间:2015-01-25 23:32:30

标签: c double

当我打印出特定的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;
 }

有人可以帮助我朝着正确的方向前进吗?

2 个答案:

答案 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

我从评论中看到你已在标题中声明了该函数。您尚未显示标题内容(或标题的相关子部分),也未显示或声明在使用该函数之前包含标题。您还应该在定义函数之前包含标头,以便标头使用该函数交叉检查定义。而且你需要完整的原型,而不仅仅是函数声明,才能从交叉检查中获得全部好处。