【问题标题】:sum of an array elements in cpp return wrong valuecpp中数组元素的总和返回错误值
【发布时间】:2021-08-07 07:34:54
【问题描述】:

我尝试编写一个简单的代码来计算数组元素的总和。每件事看起来都很正常,但是函数错误地返回了总和值(它总是将它乘以 2)。虽然如果我只想打印值,它工作正常。 这是代码:

#include <iostream>

using namespace std;

void getElements(int[],int);
int sumOfElements(int[],int);

int number;
int sum=0;
int main()
{
   int a[10];
    getElements(a,5);
    sumOfElements(a,5);
   cout<<"The sum is "<<sumOfElements(a,5)<<endl;
    return 0;
}



//Getting  array's elements

void getElements(int numbers[],int size_)
{
    for (int i=0; i<size_; i++)
    {
        cout<<"numbers["<<i<<"]: ";
        cin>>number;
        numbers[i]=number;
    }
    cout<<'\n';
}
//Calculation the sum of array's elements
int sumOfElements(int numbers[],int size_)
{
    for(int i=0;i<size_;i++)
        {
            sum+=numbers[i];
        }
        cout<<sum<<endl;
    return sum;

}

有什么想法吗?提前谢谢你!

【问题讨论】:

  • 调用sumOfElements 修改了全局变量sum ...你调用sumOfElements 两次。所以......是的......你会得到双倍的。可能应该将 sum 声明为本地到 sumOfElements
  • 现在我明白了!谢谢。
  • 正如所暗示的,最好只在需要变量的地方确定变量的范围。您应该将int number 移动到getElementsint sumsumOfElements。然后在main中,可以捕获sumOfElements的返回值并打印出来,也可以照样直接打印出来。更改后,您可以根据需要调用sumOfElements 10 次,它总是会“自动”返回相同、正确的总和。此外,在不捕获其返回值的情况下调用它本质上是无用的。

标签: c++ arrays function


【解决方案1】:

您在全局范围内定义了int sum,并两次调用了sumOfElements,因此 sum 包含您预期的两倍。

这是您的代码的修改版本,可以满足您的需求:

#include <iostream>
using namespace std;

void getElements(int[], int);
int sumOfElements(int[], int);

int main() {
  int numbers[5];
  getElements(numbers, 5);
  cout << sumOfElements(numbers, 5);
  return 0;
}

void getElements(int numbers[], int size) {
  for (int i = 0; i < size; i++) {
    cin >> numbers[i];
  }
}

int sumOfElements(int numbers[], int size) {
  int sum = 0;
  for (int i = 0; i < size; i++) {
    sum += numbers[i];
  }
  return sum;
}

【讨论】:

    【解决方案2】:

    这是您的程序的修改和更简单的版本:

    #include <array>
    #include <iostream>
    #include <numeric>
    
    using namespace std;
    
    int main(){
        const int num_elements_to_sum = 5;
        array<int, num_elements_to_sum> elements;
        for(int i=0; i<num_elements_to_sum; ++i){
            cin>>elements[i];
        }
        int sum = accumulate(elements.begin(), elements.end(), 0);
        cout<<"Sum: "<<sum<<endl;
        return 0;
    }
    

    C++ 有一个专用的固定大小array 容器,使用它来代替 C 样式的数组。这允许使用标准库算法而不是您自己的实现(例如accumulate)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 2015-12-28
      • 2017-08-23
      • 2020-01-16
      • 2021-04-11
      • 2014-04-14
      • 1970-01-01
      相关资源
      最近更新 更多