【问题标题】:C Programming: Initialize a 2D array of with numbers 1, 2, 3...etcC 编程:用数字 1、2、3...等初始化一个二维数组
【发布时间】:2013-07-10 05:32:33
【问题描述】:

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

如果用户选择例如: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;
}

【问题讨论】:

  • 运行调试器。你定义了你的数组大小吗,不。声明后输入数组大小。其实这个问题根本不值得回答。
  • int Array[a][b];这是什么???整数数组[2][2];工作正常。
  • 您的代码看起来格式很好,这是一件好事,真的!要改进的一件事是始终如一地在操作员周围放置空间。你现在正在做row &lt; acomumn &lt;bcolumn&lt;b
  • 对答案的三票赞成和对问题的一票赞成票,我想我错过了先回答并赢得声誉的黄金机会。哈哈:D

标签: c multidimensional-array user-input


【解决方案1】:
int a, b;

变量ab 未初始化,C 语言未确定其值

int Array[a][b];

您声明了一个大小为 [a,b] 的数组。问题是 a 和 b 是不确定的,此时使用它们是未定义的行为。

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

您将获得 ab 值 - 但 Array 保持不变!

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

【讨论】:

  • @BillBailey 你应该感谢他,但这纯粹是你的粗心大意。我的意思是,这是一个人可以做的非常糟糕的错误之一,最初不是犯罪,但主要部分是不努力。
【解决方案2】:

c89 标准不支持变长数组。

int Array[a][b]; 毫无意义。因为当时ab 的值是未知的。所以把它改成Array[2][2]

【讨论】:

    【解决方案3】:

    由于您的数组大小在编译时未知,因此您需要在知道 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;
    }
    

    【讨论】:

    • 这不是真的,他没有必须通过malloc声明数组。
    【解决方案4】:

    由于您的数组大小在编译时未知,因此您需要在知道ab 之后动态分配数组。

    这是一个描述如何分配多维数组(实际上是数组的数组)的链接: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++;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-12-09
      • 2012-07-12
      • 1970-01-01
      • 2014-05-14
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多