0

我正在尝试制作一个简单的程序,其中用户输入矩阵的每个值,然后程序打印矩阵。到目前为止我有

#include <iostream>

using namespace std;
int main()
{
    int n;
    cout << "A is an nxn matrix.\nn=";
    cin >> n;
    int matrix[n-1][n-1];
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<n;j++)
        {
            cout << "A[" << i+1 << "][" << j+1 << "]=";
            cin >> matrix[i][j];
        }
    }
    cout << "[[ ";
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<n;j++)
        {
            cout << matrix[i][j] << " ";
        }
        if (i!=n-1) //Just to make the output pretty
            cout << "]\n [ ";
        else
            cout << "]]";
    }
}

`

但是,每当我输入任何大小的矩阵时,例如 [[1,2,3][4,5,6][7,8,9]],程序都会返回 [[1,2,4][ 4,5,7][7,8,9]]。

谁能告诉我为什么会发生这种情况以及如何解决?

4

2 回答 2

2

当 i 或jmatrix[i][j]等于声明n-1matrixmatrix[n-1][n-1]

利用:

int matrix[n][n]; // will say 0 to n-1

代替

int matrix[n-1][n-1];

于 2013-10-09T03:23:29.373 回答
0

应该是int matrix[n][n]。通常,数组A[n]的索引从 0 到 n-1。

你溢出了行的边界,例如,如果你有int matrix[2][2]和 set matrix[0][2] = 42,你实际上是在分配matrix[1][0],当你设置时,matrix[2][0]你正在写超出数组边界,这可能会破坏一些其他变量甚至调用堆栈,这可能会导致未定义的行为。

于 2013-10-09T03:29:37.067 回答