我正在尝试为作业构建一个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(正确)
有什么想法吗?非常感谢。
答案 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