Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Scanf在二维数组中存储输入_C_Arrays_Segmentation Fault_Scanf_Multidimensional Array - Fatal编程技术网

使用Scanf在二维数组中存储输入

使用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

我想扫描输入并将其保存在一个正方形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

我的代码:

#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];