在 C 语言中初始化 2D 数组不正确



我正在尝试为作业构造一个 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 (<--最后4个数字是第二行的前4个数字(

2

4 6 8 0 2 (正确(

3

4 2 0 1 3 (正确(

有什么想法吗?多谢。

您的array声明

int array[width][height];

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

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

最新更新