3
#include <stdio.h>

int main (void)
{

    int weiners[3][2] = {
                       {5, 10, 8},
                       {8, 4, 7},
                       {3, 1, 2},
                       {0, 7, 9}
                     };
    int x,y;

    printf("Weiners:\n_______\n");

    for(x=0;x<=3;++x){
        for(y=0;y<=2;++y){
        printf("%i, ", weiners[x][y]);
        }
        printf("\n");
    }

    return 0;

}

これは、単純に小さな多次元配列を作成し、ループを使用して内容を出力することを目的としています。適切にフォーマットされており、最初の 3 列は正しく、その後の数字は非常に間違っています。ここで何が問題なのかよくわかりません。

http://i.stack.imgur.com/TSX2M.png

4

4 に答える 4

2

a を定義していてint[3][2]、それを 4 x 3 項目で初期化しているため、ループが 6 番目の値の後に到達すると、最後の項目は未定義になります。

gcc はそれについて不平を言います:

array.c: In function `main':
array.c:7: warning: excess elements in array initializer
array.c:7: warning: (near initialization for `weiners[0]')
array.c:8: warning: excess elements in array initializer
array.c:8: warning: (near initialization for `weiners[1]')
array.c:9: warning: excess elements in array initializer
array.c:9: warning: (near initialization for `weiners[2]')
array.c:10: warning: excess elements in array initializer
array.c:10: warning: (near initialization for `weiners[3]')
array.c:10: warning: excess elements in array initializer
array.c:10: warning: (near initialization for `weiners')
于 2012-05-15T16:04:13.347 に答える
1

配列の宣言が正しくありません (3x2 ではなく 4x3 です):

int weiners[4][3] = {
                   {5, 10, 8},
                   {8, 4, 7},
                   {3, 1, 2},
                   {0, 7, 9}
                 };

または、(4x3 ではなく) 実際には 3x2 の配列を使用し、一致するインデックスを使用するように for ループを修正することもできます。

for(x=0;x<3;++x) {
    for(y=0;y<2;++y) {
于 2012-05-15T16:02:13.080 に答える
1

配列は [4][3] である必要があります。

于 2012-05-15T16:04:16.263 に答える
0

間違った数の行と列を指定した形式は次のとおりです:-

int array[rows][colums]

ここで、row=4およびcolumns=3;

それに応じてループを変更します。

于 2012-05-15T16:06:35.993 に答える