c-通过函数放置后输出未更改

时间:2018-10-12 16:10:23

标签: c function pass-by-reference

这是我昨晚提交的作业问题的扩展。该程序对我来说太混乱了,所以我退后了一步,重新开始了一些关于收益和通行证的新知识。整个程序应采用任意数量的整数,然后求和并求平均值,然后打印每个整数的平方根,如果任何整数小于20,则打印布尔值true或false,最后打印布尔值true或false。如果整数在10到90之间,则返回false。

但是现在我所要做的就是把我的头裹住。目前,我只打算处理总和和平均部分。据我所知,必须使用传递引用来完成,这是我在以下代码中一直使用的引用:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int functionSumAvg(int sumAvgInput);

void main()
{
  int amountOfNumbers,number,x,output;

  output = 0;

  printf("Enter how many numbers you want: ");
  scanf("%d",&amountOfNumbers);
  printf("Input each number, separated by a space: ");

  for(x = 0; x < amountOfNumbers; ++x){
    scanf("%d",&number);
    int output = functionSumAvg(number);

  }
  printf("output: %d",output);
}


int functionSumAvg(int sumAvgInput){
  int sum =+ sumAvgInput;
  return sum;
}

我得到的想法是,输入所需数量的整数,然后将其加一,将其加到输出中,然后重复进行直到完成。之后,它将打印出最终输出,所有整数的结果相加。但是相反,它打印为零。最初它打印出了我认为是内存地址和一些大垃圾编号的数据,因此我将其设置为零。但这只是创可贴解决方案,并不能解决问题本身。

3 个答案:

答案 0 :(得分:0)

   int output = functionSumAvg(number);

创建一个新的临时output

 output = functionSumAvg(number);

答案 1 :(得分:0)

您的问题是您没有通过引用。您正在按价值传递。

您需要传递对和的引用(C中的指针),并传递(按值)要添加到和的新值。然后,调用例程将负责将和初始化为零。

int functionSumAvg(int *sum_pt, int input){…}

我不会告诉您其余的内容,因为它会影响您的学习。

注意:我的指针使用了_pt后缀,我没有使用任何其他匈牙利符号。

答案 2 :(得分:0)

fuctionSumAvg不计算任何东西的总和或平均值。它只是将局部变量sum设置为其收到的数字,并返回相同的数字。它没有将其添加到以前的总计中。计算平均值需要将总和除以元素数,但是您绝不能求和或计数任何东西。

您可以使用静态变量来保存连续的总和和计数。但是由于函数只能返回一个值,所以您需要使用指针参数来返回第二个值。

int functionSumAvg(int sumAvgInput, int *avg){ // return value is sum
  static int sum = 0;
  static int count = 0;
  sum += sumAvgInput;
  count++;
  *avg = sum/count;
  return sum;
}

然后您这样称呼它:

int sum, average;
sum = functionSumAvg(number, &average);
printf("Sum = %d Average = %d\n", sum, average);