2

私は自分のクラスでプログラムを作成しています。開始する前に、配列 'decade' のすべての値を -1 に設定する必要があります。私はこれを試しました(そしてforループのバージョン)、それは私を無限ループに入れます!なぜこれが起こっているのか、どうすれば修正できるのかを誰かが説明できますか?

コード:

int decade[9][9], i = 0, k = 0;
while (i<10) {
    while (k<10) {
        printf("i is %d, k is %d\n",i,k);
        decade[i][k] = -1;
        k++;
    }
    k=0;
    i++;
}

ありがとうございます!

これは次のように出力されます。 印刷されるもの

将来答えが必要な人は、decade を 'decade[9][9]' ではなく 'decade[10][10]' と宣言するか、自分の定義を定義してください。

4

6 に答える 6

6

サイズの配列を宣言すると、からまで9のインデックスがあります。メモリを上書きする場所に移動します。これは未定義の動作であり、微妙ではあるが誤った動作をいくつでも引き起こす可能性があります。089

于 2013-04-06T20:55:46.877 に答える
1
int decade[9][9], i = 0, k = 0;
while (i<10) {
    while (k<10) {
        printf("i is %d, k is %d\n",i,k);
        decade[i][k] = -1;
        k++;
    }
    k=0;
    i++;
}

0 から 9 (10 要素) まで反復しているため、正しくありません。

このコードは正しいです:

int decade[9][9], i = 0, k = 0;
while (i<9) {
   k = 0;

   while (k<9) {
      printf("i is %d, k is %d\n",i,k);
      decade[i][k] = -1;
      k++;
   }

i++;
}

再度ループする前に、k をゼロに設定することに注意してください。

ループなど、ループする他の可能性もありforます。実際にはカウントするためではなく、while ループを使用します。

于 2013-04-06T20:56:40.900 に答える
0
Index out of bound exception for your code. Try this one instead.

   int dimSize = 10;
    int decade[dimSize][dimSize], i = 0, k = 0;
    while (i<dimSize) {
        while (k<dimSize) {
            printf("i is %d, k is %d\n",i,k);
            decade[i][k] = -1;
            k++;
        }
        k=0;
        i++;
    }
于 2013-04-06T21:02:40.853 に答える
0

「9x9」の寸法 - 10x10 を初期化しています。decimal[10][10] に設定し、使用 (x<8) または実行 (x<=9)

于 2013-04-06T20:57:35.217 に答える