在C ++中从用户输入创建矩阵的问题

时间:2013-10-09 03:19:49

标签: c++ matrix

我正在尝试创建一个简单的程序,用户输入矩阵的每个值,然后程序打印矩阵。到目前为止我已经

#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]]。

有谁能告诉我为什么会这样,以及如何解决它?

2 个答案:

答案 0 :(得分:2)

matrix[i][j]的i {j等于n-1声明为matrix

时,您的matrix[n-1][n-1]范围内的访问范围超出了范围

使用:

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

而不是

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

答案 1 :(得分:0)

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

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