在数组问题中找到偶数(C ++)

时间:2015-11-04 21:32:26

标签: c++

我的代码是在一维数组中提取奇数和偶数。

#include <iostream>
using namespace std;

int main() {
    int a[6] = {1,6,3,8,5,10};
    int odd[]={};
    int even[]={};

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

    for (int i=0; i < 6; i++) {
        if (a[i] % 2 == 1) {
            odd[i] = a[i];
            cout << odd[i] << endl;
        }
    }

    cout << " " << endl;

    for (int i=0; i < 6; i++) {
        if (a[i] % 2 == 0) {
            even[i] = a[i];
            cout << even[i] << endl;
        }
    }

    return 0;
}

输出是:

1
3
5

2
1
6

它表明它成功地提取了奇数,但是同样的方法应用于偶数。当偶数为4时,它会出现问题。

有人能帮我找到原因吗?感谢。

3 个答案:

答案 0 :(得分:1)

你有一个未定义的行为,因此结果可能是任何甚至是随机的,甚至是格式化的硬盘。

int odd[] = {}int odd[/*count of elements inside {}*/] = {/*nothing*/}相同,所以它是int odd[0];

当您访问除数组末尾之外的元素时,未定义结果。 您可能需要考虑正确的奇数/偶数数组大小,或使用其他自动大小的数据结构。

答案 1 :(得分:1)

首先,虽然没有引起问题,但是使用数据初始化数组然后覆盖它。代码

int a[6] = {1,6,3,8,5,10};

可以替换为

int a[6];

另外,正如评论中所述,

int odd[]={};

无效。您应该分配一个与主缓冲区一样大的缓冲区(6个整数)或使用向量(尽管我个人更喜欢小型的c风格数组,因为它们可以避免堆分配和额外的复杂性)。使用全尺寸缓冲技术,您需要一个像-1这样的值(假设您只想输入正数)来存储在数组中的值列表之后,告诉输出代码停止读取,或者存储大小某处。这是为了防止读取尚未设置的值。

当输入中有4时,我不明白你的问题。除了你的数组,你的代码看起来很好。

答案 2 :(得分:0)

您可以使用filter,然后仅拨打std::vector< int > odd;来电odd.push_back(elem)是奇数。