输入二维数组

时间:2012-07-04 19:08:14

标签: c arrays multidimensional-array

我试图解决关于二维矩阵的问题,但遗憾的是矩阵输入给出了错误。这是代码:

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 = 2c = 2&gt;然后它需要6个输入然后挂起。怎么办?

4 个答案:

答案 0 :(得分:1)

如果r = 2且c = 2,则执行前2扫描,然后执行2D循环的2x2扫描。

这使得2 + 2x2 = 6。

在最后一次扫描之后,如果您的程序完成,它只是关闭,这是正常的。

答案 1 :(得分:1)

我复制了你的代码并尝试执行它,我发现它显示了你告诉我们的行为,如果我们将 r c 大于他们的限制。所以要使用适当的限制。

答案 2 :(得分:0)

我认为您的代码存在的问题是您已为阵列分配了固定数量的空间,但允许用户通过使用户提供的循环边界{{1}来提供任意数量的输入}和r变量。因此,如果用户提供cr=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];