我的代码是在一维数组中提取奇数和偶数。
#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时,它会出现问题。
有人能帮我找到原因吗?感谢。
答案 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)
是奇数。