繁体   English   中英

以二维数组输入

[英]Input in a 2-D 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 >,则它需要6个输入然后挂起。 该怎么办?

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

这使得2 + 2x2 = 6。

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

我已经复制了您的代码并尝试执行它,并且观察到,如果我们将rc设置为大于其限制,则表明该行为表明了您所告诉的行为。 因此,请使用适当的限制。

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

int r,c;
scanf("%d",&r);
scanf("%d",&c);
int arr[r][c];

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

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

int r, c;
scanf("%d", &r);
scanf("%d", &c);
int arr[r][c];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM