2016-11-18 130 views
2

嗨,我需要幫助我的程序。部分代碼似乎並沒有按預期:我的程序崩潰時,比較陣列中的元素

void up(int pole[4][4]) 
{ 

int i,j; 

for (i = 3; i >= 1; i--) 
{ 
    for (j = 3; j >= 0; i--) 
    { 
     if (pole[i][j] == pole[i-1][j]) 
     { 
      pole[i-1][j] += pole[i][j]; 
      pole[i][j] = 0; 
     } 
    } 
} 

system("cls"); 

for (i = 0; i < 4; i++) 
{ 
    for(j = 0; j < 4; j++) 
    { 
     printf("%d ", pole[i][j]); 
    } 
    printf("\n"); 
} 
} 

當我調用該函數起來開關這樣的:

switch(keynumber) 
    { 
    case 119: //w 
     up(base); 
     break;  

我剛剛結束了我的程序崩潰。 我之所以這樣做是因爲我想在控制檯中製作2048遊戲,所以首先我創建了一個數組,其中2個隨機元素的數組將是數字2,然後根據您將推送哪個鍵比較這些元素。

+5

'對於(j = 3; j> = 0; i - )':'我 - ' - >'j - ' – BLUEPIXY

+0

yeh什麼@BLUEPIXY表示,您從我而不是J中減去,導致無限循環 – D3181

+0

VTC作爲錯字.... –

回答

2
for (i = 3; i >= 1; i--) 

{

for (j = 3; j >= 0; i--) // Why here is i-- ?? instead if j-- 
     { 
      if (pole[i][j] == pole[i-1][j]) 
      { 
      pole[i-1][j] += pole[i][j]; 
      pole[i][j] = 0; 
      } 
     } 

}
當第二回路是打破?

0

參見行號8, 代替

for (j = 3; j >= 0; i--) 

它應該是

for (j = 3; j >= 0; j--) 

作爲j的值不被遞減,這是一個無限循環。