我正在尝试使用C ++中的2D数组创建MxN矩阵。
createMatrix()函数请求矩阵项的用户输入,printMatrix()函数必须打印矩阵。
但打印任务无效(我无法访问创建的阵列,我不明白为什么)
我收到错误:
matrix.cpp:35:20: error: invalid types ‘int[int]’ for array subscript
cout << matrix[i][j];
我正在使用的代码是:
#include "iostream"
using namespace std;
// user input matrix
int createMatrix(int m, int n){
int arr[m][n];
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
cout << "A[" << i << "][" << j << "] : ";
cin >> arr[i][j];
}
cout << endl;
}
return arr[m][n];
}
/*
void printMatrix(int matrix[][2], int m, int n){
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
cout << matrix[i][j];
}
}
}
*/
int main(){
int m = 2, n = 2; // m = rows, n = columns
int matrix = createMatrix(m,n);
// printMatrix(matrix, m, n); // not working as sub-routine too, main target to make it work with sub-routine
// to print matrix
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
cout << matrix[i][j];
}
}
return 0;
}
答案 0 :(得分:5)
matrix
是int
而不是int[][]
。由于它是int
,因此没有下标运算符,这就是为什么你得到的错误。您还使用了不是标准C ++的可验证长度数组。我建议您更改代码以使用std::vector
之类的
std::vector<std::vector<int>> createMatrix(int m, int n)
{
std::vector<std::vector<int>> arr(m, std::vector<int>(n));
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
cout << "A[" << i << "][" << j << "] : ";
cin >> arr[i][j];
}
cout << endl;
}
return arr;
}
然后main()
将是:
int main(){
int m = 2, n = 2; // m = rows, n = columns
std::vector<std::vector<int>> matrix = createMatrix(m,n);
// printMatrix(matrix, m, n); // not working as sub-routine too, main target to make it work with sub-routine
// to print matrix
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
cout << matrix[i][j];
}
}
return 0;
}
答案 1 :(得分:0)
您的矩阵不是数组。它是 int 。
您需要使用指针。
答案 2 :(得分:0)
是的,createMatrix
有效,但您无法对其创建的内容采取任何措施。这是因为:
arr[n][m]
是本地的(顺便说一句,超出界限)。它不是你想象的矩阵,而是位置[n] [m]的arr项目。您需要从createMatrix
作为指针传递main()
数组(就像您在printMatrix
中所做的那样),createMatrix
应该使用它,而不是本地的。{ / p>
现在关于你原来的问题:
但打印任务不起作用(我无法访问阵列 创建,我不明白为什么)
matrix
定义为int
,而不是数组。
int matrix = createMatrix(m,n);