【发布时间】:2021-10-04 04:39:19
【问题描述】:
我是初学者,我正在学习 C 编程语言。我正在尝试编写一个将两个矩阵相乘的程序。
我正在接受两个输入。第一个用于行,第二个用于列。两个矩阵的行和列将是相同的。所以我只接受一次行和列输入。
对于第一个矩阵,输入工作正常。但是对于第二个矩阵,它比第一个输入需要更多的输入。在我的测试用例中,行数为 2,列数为 3。
我的 C 代码:
#include <stdio.h>
void matrixInput(int matrix[][10], int row, int column, int matrixNo) {
printf("Matrix %d input:\n", matrixNo);
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
printf("Matrix %d [%d, %d]: ", matrixNo, i + 1, j + 1);
scanf("%d", &matrix[i][j]);
}
}
printf("\n");
}
void matrixDisplay(int matrix[][10], int row, int column, int matrixNo) {
printf("Matrix %d output:\n", matrixNo);
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
printf("\n");
}
int main() {
int row, column;
printf("Row: ");
scanf("%d", &row);
printf("Column: ");
scanf("%d", &column);
int matrix1[row][column], matrix2[row][column];
matrixInput(matrix1, row, column, 1);
matrixInput(matrix2, row, column, 2);
matrixDisplay(matrix1, row, column, 1);
matrixDisplay(matrix2, row, column, 2);
return 0;
}
当我使用void matrixInput(int matrix[row][column], int row, int column, int matrixNo) 时,出现以下错误:
error: 'row' undeclared here (not in a function)
error: 'column' undeclared here (not in a function)
我该如何解决这个问题?
【问题讨论】:
-
请一次问一个问题。 “我该如何解决这个问题?” 那么什么是“这个问题”呢?输入不正确还是编译时错误?此外,对于不正确的输入,请提供准确的运行日志,以明确“接受更多输入”的含义。
-
我认为
int matrix1[row][column], matrix2[row][column];,这个内存是在构建过程中分配的,所以row和column有垃圾值或未知。您必须为matrix1和matrix2动态分配内存。 -
请注意,如果你有两个大小为 NxM 的矩阵,只有当 N 等于 M 时才能将它们相乘。一般来说,你可以将一个 NxM 矩阵与一个 MxP 矩阵相乘;第一个矩阵中的列数必须与第二个矩阵中的行数匹配。
-
@shubham 这不正确。 OP 正在使用 Variable Length Arrays (VLA),这是一个 c99 功能(并且可选地在 C11 中支持)。
标签: c