C中二维数组初始化不正确

时间:2018-04-12 23:25:39

标签: c arrays multidimensional-array

我正在尝试为作业构建一个2D数组。我使用了嵌套的for循环来使用scanf()构建2D数组:

  int width;
  int height;

  scanf("%d %d",&width,&height);

  int array[width][height];

  for (int i=0;i<height;i++){
    for (int j=0;j<width;j++){
      scanf("%d",&array[i][j]);
    }
  }

然而,当我打印数组时,我可以看到它是以一种奇怪的方式构造的,其中第一行的所有数字超过某一点是第二行的前几个数字(而不是它们应该的数字)是)。下班后的工作正常。

示例:

输入:

6 2

1 3 5 7 9 1

2 4 6 8 0 2

3 4 2 0 1 3

创建的数组如下所示:

1 3 2 4 6 8(&lt; - 最后4个数字是第二行的前4个数字)

2 4 6 8 0 2(正确)

3 4 2 0 1 3(正确)

有什么想法吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

您对array

的声明
int array[width][height];

错了。外部循环从0到height - 1,但array[i]只能去 从0到width - 1。这同样适用于内环。你换了width 并且在数组的声明中height,它应该是

int array[height][width];

还要注意矩阵

1 3 5 7 9 1
2 4 6 8 0 2
3 4 2 0 1 3

宽度为6,高度为3,因此正确的输入应为

6 3
1 3 5 7 9 1
2 4 6 8 0 2
3 4 2 0 1 3

我编译并运行了这段代码:

#include <stdio.h>

int main(void)
{
    int width;
  int height;

  scanf("%d %d",&width,&height);

  int array[height][width];

  for (int i=0;i<height;i++){
    for (int j=0;j<width;j++){
      scanf("%d",&array[i][j]);
    }
  }

  printf("----------------\n");

  for (int i=0;i<height;i++){
    for (int j=0;j<width;j++){
      printf("%d ", array[i][j]);
    }
    printf("\n");
  }


}

输出是:

$ ./b 
6 3
1 3 5 7 9 1
2 4 6 8 0 2
3 4 2 0 1 3
----------------
1 3 5 7 9 1 
2 4 6 8 0 2 
3 4 2 0 1 3 

正如您所看到的,现在它正确阅读。见https://ideone.com/OJjj0Y