При выводе массива, выводятся лишние элементы, я бы сказал несуществующие
У меня есть двумерный массив (я его использую как матрицу 4х5), я заполняю его через клавиатуру, а потом располагаю ряды по неубыванию их наибольших элементов. Но при выводе итогового массива, там появляется какой-то несуществующий ряд. Как это исправить, сделать так чтобы эта строчка со странными числами не выводилась? Вот код:
#include <iostream>
using namespace std;
int main()
{
const int MATRIX_SIZE = 4;
const int MATRIX_SIZE2 = 5;
int matrix[MATRIX_SIZE][MATRIX_SIZE2] = {};
int maxes[MATRIX_SIZE2] = {};
int id_array[MATRIX_SIZE2] = {};
for (int i = 0; i < MATRIX_SIZE; i++)
{
for (int j = 0; j < MATRIX_SIZE2; j++)
{
cout << "Enter a number for the " << i + 1 << " row of the " << j + 1 << " column -> ";
cin >> matrix[i][j];
}
}
cout << endl << "Matrix:\n";
for (int i = 0; i < MATRIX_SIZE; i++)
{
for (int j = 0; j < MATRIX_SIZE2; j++)
{
cout << matrix[i][j] << "\t";
}
cout << endl;
}
for (int i = 0; i < MATRIX_SIZE2; i++)
{
id_array[i] = i;
}
for (int i = 0; i < MATRIX_SIZE; i++)
{
for (int j = 1; j < MATRIX_SIZE2; j++)
{
if (matrix[i][j] > matrix[i][0])
{
maxes[i] = matrix[i][j];
}
}
}
for (int i = 0; i < MATRIX_SIZE2 - 1; i++)
{
for (int j = 0; j < MATRIX_SIZE2 - i - 1; j++)
{
if (maxes[j] > maxes[j + 1])
{
int temp = maxes[j];
maxes[j] = maxes[j + 1];
maxes[j + 1] = temp;
int temp_id = id_array[j];
id_array[j] = id_array[j + 1];
id_array[j + 1] = temp_id;
}
}
}
cout << endl << "Matrix:\n";
for (int i = 0; i < MATRIX_SIZE2; i++)
{
for (int j = 0; j < MATRIX_SIZE2; j++)
{
cout << matrix[id_array[i]][j] << "\t";
}
cout << endl;
}
}
/*
test 1
input
2 3 2 2 3 3
3 1 4 2 2 4
2 2 2 2 2 2
1 5 3 4 4 5
result
2 2 2 2 2
2 3 2 2 3
3 1 4 2 2
1 5 3 4 4
-----------------------
test 2
input
-1 0 5 6 8 8
-5 -2 -8 -69 6 6
5 8 6 3 4 8
0 0 0 0 0 0
result
0 0 0 0 0
-5 -2 -8 -69 6
5 8 6 3 4
-1 0 5 6 8
*/
Ответы (1 шт):
Если вы не умеете работать с отладчиком, достаточно добавить одну строку с отладочным выводом:
for (int i = 0; i < MATRIX_SIZE2; i++)
{
cout << "id_array[i] = " << id_array[i] << endl;
for (int j = 0; j < MATRIX_SIZE2; j++)
{
И тут же вы увидите, что id_array[i] равен для вашего второго ввода 4, т.е. вы получаете выход за пределы массива (в нем только 4 строки).
Поскольку вопрос вами так и не был задан, только констатация фактов, я воспринял его как "почему это происходит", и дал ответ на него.
А вот почему у вас вычисления дают вот такой эффект — это уже совсем другой вопрос, для которого неплохо бы понимать, что вы хотите делать, какую задачу решаете. Навскидку — этот массив id_array, судя по его размеру, вообще не предназначался для работы со строками...
