2012-07-04 158 views
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]); 

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

+1

你的代码在循环后做了什么?这听起来像输入工作正常。 –

+0

我同意。此代码只能按预期工作(只要'r'和'c'不超过4)。 – netcoder

+0

当'r = 2和c = 2'时,它只需要4个数字。我没有看到您发布的代码段存在任何问题。你能发布完整的代码吗? –

回答

1

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

这使得2 + 2×2 = 6

最后scanf函数后,如果你的程序完成后,它只是关闭,这是正常的。

+1

我是否缺少问题? –

0

我认为你的代码的问题是你已经为你的数组分配了一个固定的空间量,但是允许用户提供任意数量的输入,通过使用户提供的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]; 
+2

如果他不使用c99用于堆栈工作的可变长度数组? – Aftnix

+1

@aftnix,我不明白“可变长度数组用于堆栈”的含义。如果他不使用C99,他不能使用可变长度数组,因为它们是一个特性在C99中,解决方法是使用'malloc'手动创建数组,如[这里]所述(http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444?pgno=1 )。 – Edward

+3

我只是指出,如果他不使用c99那么变长数组将不起作用。 – Aftnix

1

我抄你的代码,并试图执行它,我观察到,如果我们正在采取rc大于它们的限制,它会显示您告知的行为。所以使用适当的限制。

-1

在你的代码中,你只需运行一个循环,扫描多少值取决于执行多少个循环。 假设你取r = 1,c = 1。 在这种情况下,每个“r”值都会执行一次。 所以当你的值会大于数组的大小时,它会给你不正常的行为。

如果您先输入“c”和“r”的值,那么它将正常运行。

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

我不明白这应该是对原始问题的回答。 –

+0

此代码一定会运行。请运行此代码。 –

+0

删除downvote ...您可能想要显示如何分配自定义大小的数组。虽然它不是真正的答案,但它包含有价值的信息。 –