【问题标题】:Problems creating matrices from user input in C++在 C++ 中从用户输入创建矩阵的问题
【发布时间】:2013-10-09 11:37:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ matrix


    【解决方案1】:

    当声明为matrix[n-1][n-1]matrixmatrix 等于n-1 时,访问matrix[i][j] 中的范围外会出现未定义的行为

    用途:

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

    而不是

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

    【讨论】:

      【解决方案2】:

      应该是int matrix[n][n]。一般来说,数组A[n]的索引从0到n-1。

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

      【讨论】:

        猜你喜欢
        • 2011-02-16
        • 2022-12-07
        • 1970-01-01
        • 2018-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-16
        • 1970-01-01
        相关资源
        最近更新 更多