0

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

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

当我运行它时,它需要额外的输入。
例如: if r = 2and c = 2> then 它需要 6 个输入然后挂起。该怎么办?

4

4 回答 4

1

我已经复制了您的代码并尝试执行它,我观察到如果我们使rc大于它们的限制,它会显示您告诉的行为。所以使用适当的限制。

于 2012-07-05T14:17:43.240 回答
1

如果 r=2 和 c=2,它将执行前 2 个 scanf,然后执行 2D 循环的 2x2 scanf。

这使得 2 + 2x2 = 6。

在最后一个 scanf 之后,如果你的程序完成了,它就会简单地关闭,这很正常。

于 2012-07-04T19:11:04.843 回答
0

我认为您的代码的问题在于您为数组分配了固定数量的空间,但允许用户通过将循环的边界设为用户提供的变量rc变量来提供任意数量的输入。因此,如果用户提供r=6and c=6,在某些时候您的循环将尝试取消引用arr[5][5],这是无效的,因为您已经定义了int arr[4][4];. 如果您希望允许用户创建任意数量的行和列,您应该arr使用用户提供的输入进行初始化,如下所示:

int r,c;
scanf("%d",&r);
scanf("%d",&c);
int arr[r][c];
于 2012-07-04T19:29:10.237 回答
-1

在您的代码中,您只需运行一个循环,将扫描多少值取决于已执行的循环数。假设你取 r=1,c=1。在这种情况下,对于每个“r”值 c 将执行一次。因此,当您的值将大于数组大小时,它会给您带来异常行为。

如果您首先输入“c”的值,然后输入“r”,它将正常运行。

int r, c;
scanf("%d", &r);
scanf("%d", &c);
int arr[r][c];
于 2013-06-11T06:28:01.080 回答