Некорректная функция сдвига столбцов матрицы на К позиций

В общем, есть у меня одна функция, которая должна сдвигать столбцы матрицы вправо на К позиций. С квадратной матрицей( Например А(3,3) все работает нормально, допустим эта матрица =
1 2 3
4 5 6
7 8 9
И мы сдвигаем её вправо на 2 столбца и получаем:
2 3 1
5 6 2
8 9 3
Но если взять марицу не квадратную, например A(4,5), то оно выводит каку (я так понял функция вообще не работает с пятым столбцом)

Вот сама функция: как её переделать, что бы она работала и с не квадратными матрицами тоже?

void move(int* X, int n, int m, int K) 
{
    for (int i = 0; i < n; i++)
    {
        for (int t = 0; t < K % m; t++)
        {
            int buf = *(X + i * m + (n - 1));                                    

            for (int j = n - 1; j > 0; --j)

                *(X + i * m + j) = *(X + i * m + (j - 1));   

            *(X + i * m + 0 ) = buf; 
        }
    }
}

Так в исходной функции m не использовался вообще )

Не разбирался что в этом цикле происходит, воткнул в код отсюда, методом тыка со второй попытки поменял n на m, вроде заработало :kolobokbatya:

	int buf = 0;
	for (int i = 0; i < n; i++)
	{
		for (int t = 0; t < k % n; t++) {
-			buf = matrix[i][n - 1];
+			buf = matrix[i][m - 1];
-			for (int j = n - 1; j > 0; j--) {
+			for (int j = m - 1; j > 0; j--) {
				matrix[i][j] = matrix[i][j - 1];
			}
			matrix[i][0] = buf;

		}

	}
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>

using namespace std;

const int MATRIX_ROW_COUNT = 5;
const int MATRIX_COL_COUNT = 4;

void FillRandomMatrix(int matrix[][MATRIX_COL_COUNT])
{
    for (int i = 0; i < MATRIX_ROW_COUNT; i++)
    {
        for (int j = 0; j < MATRIX_COL_COUNT; j++)
        {
            matrix[i][j] = rand() % 100;
        }
    }
}

void PrintMatrix(int matrix[][MATRIX_COL_COUNT])
{
    for (int i = 0; i < MATRIX_ROW_COUNT; i++)
    {
        for (int j = 0; j < MATRIX_COL_COUNT; j++)
        {
            cout << setw(5) << matrix[i][j] << " ";
        }
        cout << "\n";
    }
}

void move(int matrix[][MATRIX_COL_COUNT], int n, int m, int k) {

	int buf = 0;
	for (int i = 0; i < n; i++)
	{
		for (int t = 0; t < k % n; t++) {
			buf = matrix[i][m - 1];
			for (int j = m - 1; j > 0; j--) {
				matrix[i][j] = matrix[i][j - 1];
			}
			matrix[i][0] = buf;

		}
	}

}

int main()
{
    srand(time(NULL));

    int matrix[MATRIX_ROW_COUNT][MATRIX_COL_COUNT];
    FillRandomMatrix(matrix);
    PrintMatrix(matrix);
    
    move(matrix, MATRIX_ROW_COUNT, MATRIX_COL_COUNT, 2);
    
    cout << "\nResult:\n";
    
    PrintMatrix(matrix);
    
    return 0;
}

https://onlinegdb.com/r1CUUStpU


ЗЫ текст из консоли лучше копировать, а не скриншотить, на то он и текст :wink: