Проблемы создания матриц из пользовательского ввода в C ++

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

Может ли кто-нибудь сказать мне, почему это происходит и как это исправить?

Теги:
matrix

2 ответа

2

Вы получаете неопределенное поведение для доступа к вне диапазона в matrix[i][j] когда я или 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];

  • 0
    Работал отлично, спасибо!
0

Должна быть int matrix[n][n]. Как правило, массив A[n] имеет индексы от 0 до n-1.

Вы переполняете границы строки, например, если у вас есть int matrix[2][2] и установите matrix[0][2] = 42, вы на самом деле присваиваете matrix[1][0], а когда вы set matrix[2][0] вы пишете за пределами границ массива, потенциально уничтожающих некоторые другие переменные или даже стеки вызовов, что может привести к неопределенному поведению.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню