繁体   English   中英

为什么此 C++ 代码的 output 错误? (hackerrank的问题之一)

[英]Why am I getting the wrong output for this C++ code? (one of the problem of hackerrank)

这是打印数组元素总和的程序。 它显示运行时错误。 output 出来是 0 而不是打印出元素的总和。

#include<iostream.h>
using namespace std;
void simpleArraySum()   
{
    int ar[100],n,i,sum=0;

    for(i=0;i<n;i++)
    {
        sum=sum + ar[i];
    }

    cout<<sum;
}
int main()
{
    int ar[100],n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>ar[i];
    }

    simpleArraySum();
    return 0;
}

在你主要的这一行:

int ar[100], n;

您创建一个包含 100 个元素的数组。 您稍后使用cin填充该数组

for(int i = 0 ; i < n ; i++)
{
    cin >> ar[i];
}

然后你对那个数组什么都不做。 你没有计算任何总和。 你让那个数组 go,忘记了。

然后,调用simpleArraySum function。 function 正在创建一个全新的、不同的数组

//  v-----v------There
int ar[100],n,i,sum=0;

该数组没有分配任何值。 实际上,从中读取是未定义的行为。

您想要的是在 function 的 arguments 中接收该数组:

void simpleArraySum(int* ar, int n) {
    // ...
}

并在你的主目录中这样称呼它:

simpleArraySum(ar, 100);

您可以通过不使用它们来避免 arrays 和函数的问题:

int main()
{
  int quantity = 0;
  std::cin >> quantity;
  int sum = 0;
  int value;
  while (std::cin >> value)
  {
     sum += value;
  }
  std::cout << sum << "\n";
  return EXIT_SUCCESS;
}

simpleArraySum中,变量n未初始化。 所以这个循环:

for(i=0;i<n;i++)

n读取时调用未定义的行为。

此外,您在 function 中对一个不同的数组求和,而不是在mian中读取的数组。 看来您需要将数组从main传递给这个 function:

void simpleArraySum(int *ar, int n) {

并这样称呼它:

simpleArraySum(ar, n);

最后,您甚至不需要 function ,因为您可以使用现有的算法std::accumulate

cout << std::accumulate(ar, ar + n, 0);

在 function 中,您将添加ar的元素,该元素是 function simpleArraySum()的本地元素,并且不是main()本地的数组ar

因此,将数组及其长度传递给 function 并返回其总和。 这是您更正的代码:

#include<iostream>
using namespace std;
void simpleArraySum(int ar[], int n)   
{
    int i, sum = 0;

    for(i=0;i<n;i++)
    {
        sum=sum + ar[i];
    }

    cout<<sum;
}
int main()
{
    int ar[100],n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>ar[i];
    }

    simpleArraySum(ar, n);
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM