[英]finding even numbers in the array issue (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時會出現問題。
有人可以幫我在這里找到原因嗎? 謝謝。
您有未定義的行為,因此結果可能是任何硬盤,甚至是隨機硬盤,甚至是格式化的硬盤。
int odd[] = {}
與int odd[/*count of elements inside {}*/] = {/*nothing*/}
相同,因此它是int odd[0];
當您訪問數組末尾以外的元素時,未定義結果。 您可能必須考慮正確的奇/偶數組大小,或使用其他可自動調整大小的數據結構。
首先,盡管不會造成問題,但是您可以使用數據初始化數組,然后將其覆蓋。 編碼
int a[6] = {1,6,3,8,5,10};
可以替換為
int a[6];
另外,如評論中所述,
int odd[]={};
無效。 您應該分配一個與主緩沖區一樣大的緩沖區(6個整數),或者使用一個向量(盡管我個人更喜歡c樣式的數組用於較小的大小,因為它們避免了堆分配和額外的復雜性)。 使用全尺寸緩沖區技術時,您需要一個類似於-1
的值(假設您只打算輸入正數)存儲在數組中的值列表之后,以告訴您的輸出代碼停止讀取或將尺寸存儲在某個位置。 這是為了防止讀取尚未設置的值。
輸入4時,我不明白您的問題。 除了數組之外,您的代碼看起來還不錯。
您可以使用std::vector< int > odd;
然后僅調用odd.push_back(elem)
而elem
是奇數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.