首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双重返回Zero C

双重返回Zero C
EN

Stack Overflow用户
提问于 2015-01-26 07:32:30
回答 2查看 117关注 0票数 1

当我打印出一个特定的双精度值时,它返回一个零。我打印函数中的值,它打印正确的值。但是,如果我在main中打印它,它会给我一个零。

Main:

代码语言:javascript
复制
 double med = median(array, counter);
 printf("The median is %.0lf\n", med);

功能:

代码语言:javascript
复制
 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;
 }

有没有人能帮我找到正确的方向,找到我做错的地方?

EN

回答 2

Stack Overflow用户

发布于 2015-01-26 07:36:32

您可能需要一个main可以看到的median原型。

票数 4
EN

Stack Overflow用户

发布于 2015-01-26 07:39:19

除非您在作用域中有median()的声明,否则编译器将假定它返回一个int,并且当它将“假定的int”转换为double时,事情就会变得混乱(或变为零)。不过,C99和C11要求在使用函数之前声明该函数。

因此,您需要:

代码语言:javascript
复制
extern double median(double array[], int length);  // Prototype
extern double median();                            // Declaration

或在调用median()之前在作用域中具有相同的值。请注意,第二个声明不是原型;它只是使用返回double的不确定(但不可变)参数列表声明一个函数。

我从一条注释中看到,您已经在头文件中声明了函数。您没有显示标题内容(或标题的相关子部分),也没有在使用函数之前显示或声明包含标题。还应在定义函数之前包括标头,以便标头在使用函数时对定义进行交叉检查。您需要完整的原型,而不仅仅是函数声明,才能从交叉检查中获得全部好处。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28142855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档