2017-06-20 5 views
-2

行列をジグザグで表示する必要があります。そのような:行列の サイズ:3 3行列ジグザグを表示するプログラム

00 01 02 
10 11 12 
20 21 22 
30 31 32 

表示:00 01 02 12 11 10 20 21[...]

ここに私のコードですが、それは途中でいくつかのランダムな数字が表示されます。それ以外の場合には

int lines, columns; 
cin>> lines >>columns; 
int matriz[lines][columns]; 

for (int i = 0; i < lines; ++i){ 
    for (int j = 0; j < columns; ++j){ 
     cin >> matrix[i][j]; 
    } 
} 
int j=0; 
for (int i = 0; i < lines; ++i){ 
    if (i%2==0){ 
     while(j<columns){ 
      cout<<matrix[i][j]<<' '; 
      j++; 
     } 
    }else{ 
     while(j>=0){ 
      cout<<matrix[i][j]<<' '; 
      j--; 
     } 

    } 
} 
return 0; 
+0

あなたはたぶん 'j'の範囲外に出ました。スタックオーバーフローへようこそ – yizzlez

+0

を確認してください。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+0

このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。少なくとも、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、デバッガでの観察結果を含めるように質問を編集する必要があります。 –

答えて

0

jはwhileループの開始時にcolumnsと等しくなります(したがって、はより厳密に小さくなければならないため、次の行でmatrix[i][j]が範囲外になります)。)。簡単な修正はwhile(j>=0)while(j>0)に変更し、coutの前にj--に移動することです。

しかし、他の人が言うように、デバッガを使用する方法を学ぶ必要があります。デバッガでこのようなエラーをキャッチするのは非常に簡単です。

+0

私よりもビットが速いです。私は私のデモ/証拠をここに落とします:http://ideone.com/vOR0ie – user4581301

+0

ハイライトを使用するには、「一重引用符ではない」ナンバー1の文字を使用してください。お役に立てれば –

関連する問題