-1

我无法创建用户定义的大小的二维数组,数字为 1、2、3.etc。

例如,如果用户选择: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保持不变!

最简单的解决方案:尝试将数组声明放在scanf. 您的编译器可能允许它(我认为 C99 需要这样做)。

于 2013-07-10T05:45:25.717 回答
1

c89 标准不支持可变长度数组。

intArray[a][b];是没有意义的。因为当时a和的值是未知的。b所以把它改成Array[2][2].

于 2013-07-10T05:44:23.820 回答
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 回答
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 回答