-1

ユーザーが定義したサイズ (1、2、3 など) の 2D 配列を作成するのに問題があります。

たとえば、ユーザーが を選択するa = 2 and b = 2と、プログラムは次のように生成します。

3 4

3 4

それ以外の:

1  2

3  4

私のプログラムは次のようになります。

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 0;
    int Array[a][b];
    int row, column;
    int count = 1;

/*User Input */
    printf("enter a and b \n");
    scanf("%d %d", &a, &b);

/* Create Array */
    for(row = 0; row < a; row++)
    {
        for(column = 0; column <b; column++)
        {
            Array[row][column] = count;
            count++;
        }
    }

/* Print Array*/
    for(row = 0; row<a; row++)
    {
        for(column = 0; column<b; column++)
        {
            printf("%d ", Array[row][column]);
        }
        printf("\n");
    }

    return 0;
}
4

4 に答える 4

3
int a, b;

変数は初期化さabておらず、その値は C 言語によって決定されません

int Array[a][b];

[a,b] サイズの配列を宣言します。問題は、 a と b が未定であり、この時点でそれらを使用すると未定義の動作になることです。

scanf("%d %d", &a, &b);

ab値を取得しますがArray、同じままです。

最も簡単な解決策: Array 宣言を の後に置いてみてくださいscanf。あなたのコンパイラはそれを許可するかもしれません (そうするには C99 が必要だと思います)。

于 2013-07-10T05:45:25.717 に答える
1

配列のサイズはコンパイル時には不明であるため、a と b が判明した後で配列を動的に割り当てる必要があります。次のようなコード:

int **allocate_2D_array(int rows, int columns)
{
    int k = 0;
    int **array = malloc(rows * sizeof (int *) );

    array[0] = malloc(columns * rows * sizeof (int) );
    for (k=1; k < rows; k++)
    {
        array[k] = array[0] + columns*k;
        bzero(array[k], columns * sizeof (int) );
    }

    bzero(array[0], columns * sizeof (int) );

    return array;
}
于 2013-07-10T06:00:58.900 に答える
1

可変長配列は、c89 標準ではサポートされていません。

intArray[a][b];は無意味です。aその時点ではとの値bが不明であるためです。に変更しArray[2][2]ます。

于 2013-07-10T05:44:23.820 に答える
0

コンパイル時には配列のサイズがわからないため、後で配列を動的に割り当てる必要がありaますb

多次元配列 (実際には配列の配列) を割り当てる方法を説明するリンクは次のとおりです: http://www.eskimo.com/~scs/cclass/int/sx9b.html

そのリンクのサンプル コードを適用すると、次のようになります。

int **Array; /* Instead of int Array[a][b] */

...

/* Create Array */
Array = malloc(a * sizeof(int *));
for(row = 0; row < a; row++)
{
    Array[row] = malloc(b * sizeof(int));
    for(column = 0; column <b; column++)
    {
        Array[row][column] = count;
        count++;
    }
}
于 2013-07-10T05:45:09.510 に答える