如果我输入:
,下面的代码给出了错误的答案1st Matrix
1 2 3
4 5 6
7 8 9
2nd Matrix
2 2 2
2 2 2
2 2 2
它给了我这个矩阵求和输出:
9 10 11
9 10 11
9 10 11
这显然是错误的!我似乎无法找到原因?
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int r,c;
int ir,ic;
int matrix1[r][c];
int matrix2[r][c];
int finalmatrix[r][c];
printf("Insert number of rows of the matrixes (max 10): ");
scanf("%d", &r);
printf("Insert number of columns of the matrixes (max 10): ");
scanf("%d", &c);
while(r!=c)
{
printf("The number of rows and columns are not equal, retry:\n");
printf("Insert number of rows of the Matrix (max 10): ");
scanf("%d", &r);
printf("Insert number of columns of the Matrix (max 10): ");
scanf("%d", &c);
}
for(ir=1; ir<=r; ir++)
{
for(ic=1; ic<=c; ic++)
{
printf("Insert element row %d and column %d of the first matrix: ", ir, ic);
scanf("%d", &matrix1[ir][ic]);
}
}
for(ir=1; ir<=r; ir++)
{
for(ic=1; ic<=c; ic++)
{
printf("Insert element row %d and column %d of the second matrix: ", ir, ic);
scanf("%d", &matrix2[ir][ic]);
}
}
for(ir=1; ir<=r; ir++)
{
for(ic=1; ic<=c; ic++)
{
finalmatrix[ir][ic]=matrix1[ir][ic]+matrix2[ir][ic];
}
}
printf("The sum Matrix is:\n");
for(ir=1; ir<=r; ir++)
{
for(ic=1; ic<=c; ic++)
{
printf("%d ", finalmatrix[ir][ic]);
}
printf("\n");
}
return 0;
}
答案 0 :(得分:0)
在使用它们声明VLA之前,您的代码无法初始化变量r
和c
。您无法知道这些数组的大小,或者r
和c
是否为正值!我很惊讶这段代码甚至会运行。我运行了你发布的代码,并得到了这个运行时错误:
运行时错误:可变长度数组绑定计算为非正值-1208010352
我做了以下更改,代码有效:
int r,c;
int ir,ic;
printf("Insert number of rows of the matrixes (max 10): ");
scanf("%d", &r);
printf("Insert number of columns of the matrixes (max 10): ");
scanf("%d", &c);
int matrix1[r][c];
int matrix2[r][c];
int finalmatrix[r][c];
您的示例的输出:
The sum Matrix is:
3 4 5
6 7 8
9 10 11
根据关于数组声明符的标准部分:
[和] 可以分隔表达式....如果它们分隔表达式(指定数组的大小),则表达式应具有整数类型。 (ISO / IEC 9899:1999 6.7.5.2/1)
如果size是一个不是整数常量表达式的表达式...每次计算它时,它的值应大于零。 (ISO / IEC 9899:1999 6.7.5.2/5)
因此r
或c
的负值很可能导致未定义的行为,这意味着任何事情都可能发生!当我运行代码时,我遇到了运行时错误。您运行相同的代码,得到了不同的结果。行为未定义,因此无法确定可能发生的情况。