#c #arrays
#c #массивы
Вопрос:
у меня проблема. Я создаю матричный калькулятор. Чего я хочу, так это выбрать размер матрицы. У меня есть два 2D-массива (a) и (b).Я заполняю массивы целыми числами. Проблема в том, что целые числа (мои константы, которые я сохраняю в массивах) не выводятся, только позиции, в которых они находятся. Просто указатели, похоже, не разыменовываются. Не знаю, что не так.
void rotater(int* a,int* b,int select)
{
int* matrix;
if(select == 1)
{
for(int d = 0; d < i; d )
{
for(int c = 0; c < j; c )
{
cout << *(a c) << *(a d) << " ";
//if i choose the size as 2x2 this comes out as a
//matrix {11,12;21,22} just as positions not my
//numbers that i choose
}
cout << endl;
}
}
else if(select == 2)
{
for(int d = 0; d < y; d )
{
for(int c = 0; c < x; c )
{
cout << *(b d) <<*(b c) <<" ";
}
cout << endl;
}
}
}
int a[i][j];
int b[x][y];
int *matrix1 = amp;a[0][0];
int *matrix2 = amp;b[0][0];
cout << endl;
cout << "Choose_matrix: " << "(1,2,both)" << endl;
cin >> matrix;
f = matrix //I have function that changes char matrix to int f
cout << endl;
cout << "Choose_operand: " << "(rotr,rotl, ,-,*,/,diag)" << endl;
cin >> operand;
e = operand // I have function that changes char operand to int e
switch(e)
{
case 1:
rotater(matrix1, matrix2, f); // calling function with 3 parameters
break;
default:
return 0;
}
Комментарии:
1. Не могли бы вы добавить main в свой пример? Таким образом, его можно скомпилировать, а также показать результаты, отличные от ожидаемых.
2. Ваши индексы рассчитаны неправильно. Например, используйте
b[c d * x]
Ответ №1:
Код в стиле C
Во-первых, вы используете C , поэтому вам следует избегать использования массивов в стиле C и необработанных указателей, где это возможно. Я бы рекомендовал либо использовать std::vector<int>
, либо, поскольку вам нужен постоянный размер, std::array<int>
.
Избыточный код
Я не понимаю, почему вы включаете два массива в свою rotater
функцию. У вас одинаковая логика для каждого параметра, но там много избыточного кода.
Тип параметра
Ваши параметры в rotater
запрашивают int*
значение an, но при вызове функции вы присваиваете ей значение int[][]
, которое представляет собой другой тип данных.
Рабочий пример
Как бы то ни было, в вашем коде происходит много всего, что не имеет четких функций. Кроме того, вы не включили main()
функцию, поэтому я не могу скомпилировать ваш код. На моем месте я бы запустил вашу программу через отладчик, чтобы посмотреть, что происходит, немного глубже. Вот к чему, я полагаю, вы стремитесь.
#include <iostream>
void matrix_display(int *mat, const int x_size, const int y_size)
{
for ( int x = 0; x < x_size; x )
{
for ( int y = 0; y < y_size; y )
{
std::cout << *(mat x) << *(mat y) << " ";
}
}
std::cout << std::endl;
}
int main()
{
const int X_SIZE = 2;
const int Y_SIZE = 2;
int matrix[X_SIZE*Y_SIZE] = {4, 7, 3, 7};
matrix_display(matrix, X_SIZE, Y_SIZE);
return 0;
}
опять же, на моем месте я бы использовал std::array<std::array<int, 2>, 2>
, а не an int*
Комментарии:
1. Ну, я новичок в C , у меня есть немного знаний из C, но я попробую то, что вы предлагаете, и опубликую результат, спасибо.
2. Вы уверены, что ` std::cout << *(mat x) << *(mat y) << » «;` правильно?