2016-11-18 14 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

for(j = 3; j> = 0; i - ) ':' 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

は、jの値がデクリメントされないように、それは

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

なければならない代わり

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

の行番号8、 を参照してください、それが無限ループです。

関連する問題