已计算但未存储。为什么?

时间:2017-05-12 21:05:11

标签: c++ c arrays

我今天开始在C学习功能。我在函数中的问题" sum"其中I + =来自数组的数字,它确实写出了数字的总和,但是当程序出现时#34;总和"函数整数,我保存这些数字的总和重置为0,我似乎无法找出原因。 这是代码,我确实希望你能帮助我。

#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
void arr(int hello[], int size) {
    srand(time(NULL));
    for (int i = 0; i < size; i++) {
        hello[i] = rand() % 100;
    }
}
void print(int hello[], int size) {
    for (int i = 0; i < size; i++) {
        cout << hello[i] << " ";
    }
}
int sum(int hello[], int size, int sumup) {
    for (int i = 0; i < size; i++) {
        sumup += hello[i];
    }
    cout << endl;
    cout << "Sum of these numbers: " << sumup << endl;
    return sumup;
}
int SumEvenOrOdd(int sumup, int size) {
    int average = sumup / size;
    cout << "Average of the all numbers in array: " << average << endl;
    return average;
}
int main() {
    bool bye = false;
    const int size = 10;
    int hello[size], sumup = 0, input;
    arr(hello, size);
    print(hello, size);
    sum(hello, size, sumup);
    SumEvenOrOdd(sumup, size);
    cin.get();
    cin.get();
    return 0;
}

5 个答案:

答案 0 :(得分:2)

问题是sumup函数中的形式参数sumsumup中的实际参数main不同,因此对{{1}的任何更改函数中没有反映在sumup的{​​{1}}中。

有几种方法可以解决这个问题:

  1. 在C ++中,您可以将sumup中的main参数定义为<{1}}中sumup变量的参考:{{ 2}}
  2. 在C和C ++中,您可以将sum中的sumup参数定义为{em>指针到main变量{ {1}}:
    int sum( int hello[], int size, int &sumup )
      {
        // leave everything else the same.  
      }
    
  3. sumup的结果分配回sum或其他变量:
    sumup
    虽然问题变成了,为什么首先将main作为论证?只需在int sum( int hello[], int size, int *sumup ) // leading * is necessary { ... *sumup += hello[i]; // leading * is necessary } int main( ) { ... sum( hello, size, &sumup ); // leading & is necessary ... } 中声明一个局部变量来保存该值,然后返回:
    sum

答案 1 :(得分:1)

将您的专线sum(hello, size, sumup);更改为sumup = sum(hello, size, sumup);。然后,您的返回值将保存在变量sumup中。

如果您不想通过返回值保存sumup变量,您应该了解按引用调用(以及它与按值调用的方式不同)。然后你可以写入函数参数sumup并更改原始值而不是函数内的本地副本。

这将打开指针操作的蠕虫。与C一起玩FUN的最大来源之一; - )

示例:https://www.codingunit.com/c-tutorial-call-by-value-or-call-by-reference

答案 2 :(得分:0)

将函数参数作为引用传递,以便可以访问它们:

void sum(int hello[], int size, int& sizeup)

这将允许sizeup在函数之外保留它的值,因为你传递了sizeup的引用。

答案 3 :(得分:0)

试试这个,

sumup = sum(hello, size, sumup);

你应该得到正确的总和值。

答案 4 :(得分:0)

函数sum返回一个没有接受它的变量的值。 改变这一行:

   sum(hello, size, sumup);

为:

   int my_sum = sum(hello, size, sumup);

然后你就可以在你的主体中使用my_sum。

另一个解决方案可以是通过引用将sumup传递给您的函数,只需将decleration更改为:

 void sum(int hello[], int size, int & sumup)