2015-11-05 83 views
-1

我盯着這段代碼至少4個小時。爲什麼我的數組元素被覆蓋?

我不知道我在做什麼錯。

我正在用簡單的for循環更新數組hand[5][2]

存儲在hand[0][2],hand[0][3]hand[0][4]中的值將不斷被覆蓋。

我用調試器慢慢地通過每一行,但我仍然不知道爲什麼我得到不同的值。

這是我得到

hand[0][0] = 0 
hand[0][1] = 1 
hand[0][2] = 2 
hand[0][3] = 3 
hand[0][4] = 4 
hand[1][0] = 0 
hand[1][1] = 1 
hand[1][2] = 2 
hand[1][3] = 3 
hand[1][4] = 4 
0 1 0 1 2 // WHY ARE hand[0][2],hand[0][3],hand[0][4] not the same???? 
0 1 2 3 4 

代碼的輸出:

int main() { 
    //tests(); 
    int hand[5][2]; 
    int a[5], b[5]; 
    char line[100]; 
    int player = 0; 
    int card = 0; 
    for (int i = 0; i < 10; i++) { 
     hand[player][card] = card; 
     printf("hand[%d][%d] = %d\n", player, card, hand[player][card]); 
     card++; 
     if (card == 5) { player++; card = 0; } 
    } 
    // print first hand 
    for (int j = 0; j < 5; j++) { 
     printf("%d ", hand[0][j]); 
    } 
    printf("\n"); 
    // print second hand 
    for (int j = 0; j < 5; j++) { 
     printf("%d ", hand[1][j]); 
    } 
    printf("\n"); 
    return 0; 
} 
+0

,而不是'如果(卡== 5){球員++; card = 0; }'你可以使用mod(%)運算符來獲得相同的效果(雖然在某些情況下會稍微慢一些):'hand [i/5] [i%5] = card;'(這不是答案因爲personjerry已在下面回答) –

+0

C++風格:http://paste.ubuntu.com/13111470/或至少http://coliru.stacked-crooked.com/a/61588103c6184ee5 – sehe

+0

我是一個IDIOTTTT – nevermind

回答

4

int hand[5][2];應該int hand[2][5];

+0

同意,你每隻有2隻手,每隻有5張牌,你擁有的方式表明你有5隻手,每隻手中有2張牌 –