我正在尝试为作业构造一个 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
13 5 7 9 1
24 6 8 0 2
34 2 0 1 3
创建的数组如下所示:
1 3 2 4 6 8 (<--最后4个数字是第二行的前4个数字(
24 6 8 0 2 (正确(
34 2 0 1 3 (正确(
有什么想法吗?多谢。
您的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