ваша матричная декларация говорит int matrix[3][3];
, что в ней есть три 1-D массива, и в каждом 1-D массиве вы можете хранить три элемента.И в C/C++
индекс массива начинается с zero
.
Проблемным утверждением является for (int i = 1; i <= 3; i++)
, так как вы пропускаете matrix[0][0]
и пытаетесь сохранить в matrix[3][3]
, который не существует, что, в свою очередь, вызывает undefined поведение.
Итак, сначала запустите итерацию цикла от 0
до числа rows
и столбца соответственно.
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3 ; j++) {
cout << "Row " << i << " column " << j<< ": ";
cin >> matrix[i][j];
}
}
Приходите к упомянутой вами задаче, распечатать матрицу, в которой все диагонали выводятся как ноль.? записать одно условие так, чтобы, если row
value и col
value были равны, присвойте его zero
, иначе сканирование от пользователя.Вот пример кода
int main(void) {
int matrix[3][3] = { 0 }; /* initialize it */
int row = sizeof(matrix)/sizeof(matrix[0]); /* find no of rows */
int col = sizeof(matrix[0])/sizeof(matrix[0][0]);/* find no of columns */
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if( i == j)
matrix[i][j] = 0;/* when i and j are equal means thats diagonal and assign it to zero */
else /* if its not diagonal then scan from user */
std::cin>>matrix[i][j];
}
}
return 0;
}
Во-вторых , Я также должен передать его функции. , чтобы узнать, как передать массив 2d в функцию.Вот пример примера.
void diagonal(int (*mat)[3],int row, int col) { /* mat is pointer to an array */
std::cout<<"printing matrix "<<std::endl;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
std::cout<<mat[i][j]<<"\t";
}
std::cout<<std::endl;
}
}
И вызовите diagonal()
, как показано ниже, из функции main()
как
diagonal(matrix,row,col); /* pass matrix, no of rows, no of columns */