我试图解决关于二维矩阵的问题,但遗憾的是矩阵输入给出了错误。这是代码:
int arr[4][4];
int r, c;
scanf("%d", &r);
scanf("%d", &c);
int i, j;
fflush(stdin);
for(i = 0; i < r; i++)
for(j = 0; j < c; j++)
scanf("%d", &arr[i][j]);
当我运行它时,需要额外的输入
例如:如果r = 2
和c = 2
&gt;然后它需要6个输入然后挂起。怎么办?
答案 0 :(得分:1)
如果r = 2且c = 2,则执行前2扫描,然后执行2D循环的2x2扫描。
这使得2 + 2x2 = 6。
在最后一次扫描之后,如果您的程序完成,它只是关闭,这是正常的。
答案 1 :(得分:1)
我复制了你的代码并尝试执行它,我发现它显示了你告诉我们的行为,如果我们将 r 和 c 大于他们的限制。所以要使用适当的限制。
答案 2 :(得分:0)
我认为您的代码存在的问题是您已为阵列分配了固定数量的空间,但允许用户通过使用户提供的循环边界{{1}来提供任意数量的输入}和r
变量。因此,如果用户提供c
和r=6
,则您的循环会尝试取消引用c=6
,这是因为您已定义arr[5][5]
,因此无效。如果您希望允许用户根据需要创建任意数量的行和列,则应使用用户提供的输入初始化int arr[4][4];
,如下所示:
arr
答案 3 :(得分:-1)
在您的代码中,您只需运行一个循环,扫描多少值取决于执行的循环数。 假设你取r = 1,c = 1。 在这种情况下,对于每个“r”值,c将执行一次。 所以当你的值大于那个时候的数组大小时,它会给你异常的行为。
如果您首先输入“c”的值,之后输入“r”,它将表现正常。
int r, c;
scanf("%d", &r);
scanf("%d", &c);
int arr[r][c];