如何在获取值后如何获得所有奇数和正偶数的和,我的程序给出错误并退出。如何解决此问题以及为什么会发生这种错误,如果我输入的值小于5,它将给出内存地址
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
int n,sum=0,mul=0,i,j;
cout<<"How many numbers you want to enter?";
cin>>n;
int arr[n],odd[]={0,0,0,0,0},even[5];
for(i=0;i<n;i++)
{
cout<<"Enter Val "<<i+1<<": ";
cin>>arr[i];
}
for(j=0;j<n;j++)
{
if(arr[j]%2==0)
{
even[j]=arr[j];
}
else
{
odd[j]=arr[j];
}
}
for(j=0;j<n;j++)
{
sum+=odd[j];
mul*=even[j];
}
cout<<"Sum of Odd "<<sum<<endl;
cout<<"Product of Even "<<mul<<endl;
return 0;
}
初始化数组奇数后,奇数和的总和,但乘积仍然不算!
最佳答案
您的代码中存在一些问题。 arr[n]
是非标准C ++,并且您只允许您为奇数和偶数提供5个插槽(如果用户想输入20个数字该怎么办?)此外,您总是将第j
个数字写入odd[j]
或even[j]
...这意味着如果第一个数字是奇数,第二个数字是偶数,则您现在向even[1]
写了一个值,但从未向even[0]
写任何东西。您没有正确地填充数组,最后得到了几个未初始化的int
,这些使得最终计算的行为不确定。
一种简单的解决方案是完全不使用数组来避免所有这些问题,因为您实际上并不需要它们:
int odd = 0, even = 1;
cin >> n;
int x;
for (int i = 0; i < n; ++i) {
// get the next value
cin >> x;
// either multiply or add it as appropriate
if (x % 2 == 0) {
even *= x;
}
else {
odd += x;
}
}
关于c++ - 如何获得数组中偶数元素的奇数和乘法的和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28469299/