![](/img/trans.png)
[英]Getting error on submission for Kattis "OddGnome" problem. I am getting the right output locally, what is wrong with my code? C++
[英]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.