2016-12-27 73 views
-1

我一直在遇到這個奇怪的錯誤,其中我的陣列的元素將與另一個交換位置。我可以通過在編譯之前手動更改元素來解決問題,但爲了便於訪問,我想保持它的方式。我的目標是比較位並將結果存儲在一個數組中。在我調用該函數後,我沒有主動調用函數,因此它不會更改數組本身。當我將數組聲明爲常量時,它完成同樣的事情。元素切換位置編譯?

這裏是我的數組:

int myconsts[8][8] = { 
    { 6, 10, 0, 9, 14, 6, 6, 7 } 
}; 

我作爲14號(myconsts[4])和7(myconsts[7])問題將隨機交換位置。以下是我在我的功能比較位

std::array<std::array<int, 4>, 8> myfunct(int arr[][8]) { 
    std::array<std::array<int, 4>, 8> arr2; 
    int i = 0; 
    do { 
     std::bitset<4> num1(arr[0][i]); 
     std::bitset<4> num2(arr[1][i]); 
     std::bitset<4> num3(arr[2][i]); 

     int no; 
     int no2; 
     int no3; 

     for (int x = 0; x < 4; x++) { 
      int sum = 0; 
      std::cout << num1[x] << " Num: " << num1[0] << num1[1] << num1[2] << num1[3] << std::endl; 

     } 
     std::cout << " " << std::endl; 
     i++; 
    } while (i < 8); 
    //just testing the logic 
    arr2 = { 0 }; 
    return arr2; 
} 

輸出:

[0]

0 Num: 0110 
1 Num : 0110 
1 Num : 0110 
0 Num : 0110 

[1]

0 Num : 0101 
1 Num : 0101 
0 Num : 0101 
1 Num : 0101 

[2]

0 Num : 0000 
0 Num : 0000 
0 Num : 0000 
0 Num : 0000 

[3]

1 Num : 1001 
0 Num : 1001 
0 Num : 1001 
1 Num : 1001 

這裏是它交換與原始元素位置[7]! [4]

0 Num : 0111 
1 Num : 0111 
1 Num : 0111 
1 Num : 0111 

[5]

0 Num : 0110 
1 Num : 0110 
1 Num : 0110 
0 Num : 0110 

[6]

0 Num : 0110 
1 Num : 0110 
1 Num : 0110 
0 Num : 0110 

[7]

1 Num : 1110 
1 Num : 1110 
1 Num : 1110 
0 Num : 1110 

它的元素[0..7],兩者之間的每個空間都代表着一個新元素我不確定在所有編譯器上它是否一樣。

+2

解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –

+0

@πάνταῥεῖ謝謝! – Countchocula

+0

@πάνταῥεῖ我不確定搜索到什麼才能得到直接的答案。 – Countchocula

回答

0

我不明白你在描述什麼。

這是我的註解你的輸出:

0 Num : 0111 // This is 2 + 4 + 8 = 14 
1 Num : 0111 
1 Num : 0111 
1 Num : 0111 

0 Num : 0110 // This is 2 + 4 = 6 
1 Num : 0110 
1 Num : 0110 
0 Num : 0110 

0 Num : 0110 // This is 2 + 4 = 6 
1 Num : 0110 
1 Num : 0110 
0 Num : 0110 


1 Num : 1110 // This is 1 + 2 + 4 = 7 
1 Num : 1110 
1 Num : 1110 
0 Num : 1110 

看起來你只是把:..., 14, 6, 6, 7 };
這是你的陣列的最後4個元素。

我會說一切都看起來正確。

也許你反向讀取你的位在屏幕上,因爲LSB(最低顯著位)爲通常提上極右,你已經把它放在最左邊

但是你的代碼工作正常。

+1

哦,我的上帝,我是個白癡。我正在向後看。我不是軟件工程師,我對這個問題還不熟悉。 – Countchocula

+1

這讓我感覺很蠢。謝謝! – Countchocula

+0

你的***自我讓你覺得自己很愚蠢。你不是軟件工程師,但你認爲你發現了一個編譯器錯誤?你寫信給一個由軟件工程師填補的董事會,*「如果你不瞭解4位二進制,這可能是一個難題」*。 (不,這不是我們任何人的鬥爭)。 – abelenky