【问题标题】:Why am I getting the wrong output for this C++ code? (one of the problem of hackerrank)为什么我得到这个 C++ 代码的错误输出? (hackerrank的问题之一)
【发布时间】:2020-10-21 02:31:28
【问题描述】:

这是打印数组元素总和的程序。它显示运行时错误。输出结果为 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;
}

【问题讨论】:

  • 你有两个数组,一个你读取输入,一个你求和,我想它们应该是一个并且相同
  • simpleArraySum 中的数组与main() 中的数组不同。
  • 顺便说一句,您不需要任何数组,只需将数字相加并打印结果
  • 不同函数中的变量和数组不一样,只是因为你给它们取了相同的名字。这不是 C++ 的工作方式(或我能想到的任何编程语言)。你可能需要熟悉一些基本的编程概念,这里是 C++ 书籍列表stackoverflow.com/questions/388242/…
  • 一旦你得到了正确的代码,你想看看std::vector。更容易使用,并且使用固定大小的数组,您要么浪费内存,要么数组中的空间太小,而向量可以在运行时更改其大小

标签: c++ algorithm c++11


【解决方案1】:

在您的主目录中的这一行:

int ar[100], n;

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

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

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

然后,您调用simpleArraySum 函数。该函数正在创建一个全新的、独特的数组

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

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

您想要的是在函数的参数中接收该数组:

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

然后在你的 main 中这样称呼它:

simpleArraySum(ar, 100);

【讨论】:

  • 非常感谢大家。我通过使用 void SimpleArraySum(int *ar, int n) 解决了它
  • 我真的很惊讶他得到了 0 的总和,C++ 没有初始化数组的默认值,我原以为他会得到类似 180982938 或类似的东西......
【解决方案2】:

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

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;
}

【讨论】:

  • 对不起,挑剔,但不知道任务的细节,这段代码可能会做一些不同的事情。在第一个 n 数字之后可能会有更多数字 ;)
【解决方案3】:

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

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

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

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

void simpleArraySum(int *ar, int n) {

然后这样称呼它:

simpleArraySum(ar, n);

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

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

【讨论】:

    【解决方案4】:

    在函数中,您将添加ar 的元素,该元素是函数simpleArraySum() 的本地元素,而不是main() 的本地数组ar 的元素。

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

    #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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-25
      • 2019-05-09
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多