函数返回非预期值

时间:2017-04-24 01:58:26

标签: c arrays

我有一个函数可以计算数组中偶数的算术平均值。

int func(int *x, int length)
{
  float even_sum = 0;
  int even_num;
  int i;
  float result;
  for (i = 0; i<length; i++) 
 {
    if (x[i] % 2 == 0)
     {
      even_sum = even_sum + x[i];
      even_num++;
     }
 }
 result = even_sum/even_num;
 return result;

}

给出一个数组1 2 2 1我期望得到2作为平均值,但我一直得到0作为结果。我的代码中的错误在哪里?

4 个答案:

答案 0 :(得分:2)

int func(int *x, int length)
{
  float even_sum = 0;
  int even_num; // <-- uninitialized, could be anything!
  int i;
  float result;
  for (i = 0; i<length; i++) 
 {
    if (x[i] % 2 == 0)
     {
      even_sum = even_sum + x[i];
      even_num++; // <-- adding 1 to anything yields undefined behavior 
     }
 }
 result = even_sum/even_num; // <-- even more undefined behavior
 return result;
}

您初始化了一些但不是所有变量。最好养成将变量设置为合理起始值的习惯,就像使用float even_sum = 0;

一样

答案 1 :(得分:1)

初始化even_num=0

如果你没有初始化变量,他们可能有垃圾值。

在您的情况下,even_num有一个巨大的值,大于even_sum,导致您的结果为0

答案 2 :(得分:1)

@Pbd是正确的。如果您安装了最新版本的gcc并在编译时使用命令行标志-Wall -Wextra -Wshadow,它将为您提供未初始化值的警告。

答案 3 :(得分:-1)

我认为代码中唯一的问题是当你将int数组传递给这个函数时。除此之外一切都很好。我通过初始化&#39; x&#39;来运行代码。数组,它工作正常。