关于代码的编译错误问题

我的提示是“a.c:11:17: error: expected expression before ‘{’ token
A[100][23] = { 0 };//每读取就有个新的数组”
但是代码是对的,我没找到错误,我是提交之后显示的这个问题,但在编译器上没有问题。
要求是:找出最前面的最大最小值并且交换

#include<stdio.h>
int main() {
    int i = 1, max = 0, min = 0;
    int maxd = 0, maxp = 0,mind=0,minp=0;
    int n = 0, m = 0;
    int d = 0, p = 0,j=0,c=0;
    int A[100][23] = { 0 };
    for (i = 1; i != 0; i++) {//组数
        scanf("%d %d", &n, &m);//n行m列
        if (c!=i) {
            A[99][22] = { 0 };//每读取就有个新的数组
            for (d = 0; d < n ; d++) {//行增加
                for (p = 0;  p < m; p++) {//列增加
                    scanf("%d", &A[d][p]);
                }
            }
            int max = A[0][0], min = A[0][0];
            for (d = 0; d < n; d++) {
                for (p = 0; p < n; p++) {
                    if (max < A[d][p]) {
                        max = A[d][p];
                        maxd = d;
                        maxp = p;
                    }
                    if (min > A[d][p]) {
                        min = A[d][p];
                        mind = d;
                        minp = p;
                    }
                }
            }
            A[maxd][maxp] = min;
            A[mind][minp] = max;
            for (d = 0; d < n; d++) {
                j = 0;
                for (p = 0; p < n; p++) {
                    if (j == 0) {
                        printf("%d", A[d][p]);
                        j++;
                    }
                    else {
                        printf(" %d", A[d][p]);
                    }
                }
                printf("\n");
            }
        }
        c = i;
    }
    return 0;
}

11行的写法是错误的
第7行定义时,可以后面直接={0}进行数组初始化
但11行这么写就不对了,首先这里A[100][23]是A数组的第100行,第23列的意思,和定义数组时的A[100][23]表示数组有100行23列是不一样的。11行的A[100][23]是越界访问了。如果需要将数组全部初始化为0,那么需要用循环逐个设置为0,或者memset((int*)A,0,sizeof(A));