如何在获取值后如何获得所有奇数和正偶数的和,我的程序给出错误并退出。如何解决此问题以及为什么会发生这种错误,如果我输入的值小于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/

10-13 00:08