使用Scanf在二维数组中存储输入
我想扫描输入并将其保存在一个正方形2d数组中 前两个数字保存在单独的变量中,第一个数字是目标数字(此处不相关),第二个数字保存在变量m中,即在这种情况下m=5m是方阵的行数/列数。其余的输入应保存在数组中。 对于这个特定的输入,我得到了一个分段错误,随机数被打印在屏幕上。 我使用了一些printf语句来跟踪哪里出了问题,我注意到第一个循环中的索引I在一个场景中从2跳到了11,在另一个输入中跳到了33。 谢谢你的帮助!我希望我没有错过一个明显的错误 输入:(按enter键,每行由上一行分隔。) 42 5 037910 9 13 20 5 20 12 11 33 0 12 17 39 22 3 18 我的代码:使用Scanf在二维数组中存储输入,c,arrays,segmentation-fault,scanf,multidimensional-array,C,Arrays,Segmentation Fault,Scanf,Multidimensional Array,我想扫描输入并将其保存在一个正方形2d数组中 前两个数字保存在单独的变量中,第一个数字是目标数字(此处不相关),第二个数字保存在变量m中,即在这种情况下m=5m是方阵的行数/列数。其余的输入应保存在数组中。 对于这个特定的输入,我得到了一个分段错误,随机数被打印在屏幕上。 我使用了一些printf语句来跟踪哪里出了问题,我注意到第一个循环中的索引I在一个场景中从2跳到了11,在另一个输入中跳到了33。 谢谢你的帮助!我希望我没有错过一个明显的错误 输入:(按enter键,每行由上一行分隔。) 4
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char* arv[]){
int target; // for later processing, irrelevant here
int m; // m = #rows and #columns of array
int array[m][m];
scanf("%d %d", &target, &m);
int i, k;
for(i = 0; i < m; i++){
for(k = 0; k < m; k++){
scanf("%d", &(array[i][k])); // save value in array.
}
}
// the problem occurs before this point.
for(i = 0; i < m; i++){
for(k = 0; k < m; k++){
printf("%2d", array[i][k]); // print array.
}
printf("\n");
}
return 0;
}
#包括
#包括
int main(int argc,char*arv[]{
int target;//对于以后的处理,此处不相关
int m;//m=#数组的行和#列
整数数组[m][m];
scanf(“%d%d”、&target、&m);
int i,k;
对于(i=0;i
在创建数组[m][m]
之前,您尚未初始化m
的值。如果不初始化,m
的值可以是任何值
更改:
int array[m][m];
scanf("%d %d", &target, &m);
到
这就是你搞砸的地方
int m;
int array[m][m];
这里,
m
未初始化,您正在创建一个m*m
元素数组。在声明数组之前,需要初始化m
。因此,在scanf
之后移动数组声明,以便在声明数组之前初始化m
。在m
之前声明可变长度的数组m
具有有意义的值。把这个声明放在第一个scanf
@MOehm之后,我简直不敢相信我花了两个小时试图找出什么是错的,却忽略了这一点。谢谢!嗯,众所周知的新鲜的眼睛。。。
int m;
int array[m][m];