方阵循环右移提交显示部分正确

该题(方阵循环右移)提交到题库一直显示部分正确,且仅为一个测试点正确,请大家帮我看看是哪里出了问题。
描述
输入一个n行n列的方阵,对该方阵中的每个元素循环向右移m个位置,
即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。
输入
在第一行中输入两个整数m(1≤m≤20)和n(1≤n≤10),整数之间用空格隔开;
接着输入n行数据,每行有n个整数,每个整数之间用空格隔开。
输出
输出移动后的方阵,即输出n行数据,每行有n个整数,每个整数之间用空格隔开。

#include<stdio.h>

int main()
{
    int m = 1, n, i, j;
    scanf("%d%d", &m, &n);
    int a[n][n];
    for(i=0; i<n; i++)
        for(j=0; j<n; j++)
            scanf("%d", &a[i][j]);
    
    int b[n][n];
    for(i=0; i<n; i++)
        for(j=0; j<n; j++)
        {
            if(m>=1 && m<=20)
            b[i][j] = a[i][(m+j-1)%n];
        }
             
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
            printf("%d ", b[i][j]);
        printf("\n");
    }
    
    return 0;
}

测试数据为:
2 3
1 2 3
4 5 6
7 8 9
显示:
2 3 1
5 6 4
8 9 7
或者:
8 5
11 71 24 69 12
39 52 39 59 47
45 24 53 67 10
79 55 25 79 65
12 29 89 89 90
显示:
24 69 12 11 71
39 59 47 39 52
53 67 10 45 24
25 79 65 79 55
89 89 90 12 29
在思考过程中有考虑过中间算法处理过程中(m+j-1)%n的m是否有为0的可能性,故添上if语句作为条件限制,但这样似乎限制了程序的一般性,
希望大家能够在我原来算法的基础上予以指点改正!!

m是0也要赋值啊,m是0不赋值你的数组b里不是随机数了吗
此外,对于c语言来说,你的语法都是错的
在每个块内,定义必须在执行之前,也就是scanf不能放到int前面去
而且除非C99,否则不支持数组长度是变量
告诉你n最大是10了,你直接定义a[10][10]即可