C 我不知道为什么会出现这个错误

C 我不知道为什么会出现这个错误,c,C,我制作了一个用c语言打印矩阵的代码: int main(int argc, char** argv) { int i,j,columna,n,m; char sala_cine[X][Y]; sala_cine[X][Y]= { {' ',1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}, {'1',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '

我制作了一个用c语言打印矩阵的代码:

int main(int argc, char** argv) {
    int i,j,columna,n,m;
    char sala_cine[X][Y];

    sala_cine[X][Y]=
    {
        {' ',1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},
        {'1',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'2',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'3',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'4',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'5',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'6',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'7',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'8',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}
    };
    for (i=0;i<X;i++){
        for(j=0;j<Y;j++)
            printf("%c",sala_cine[X][Y]);
    printf("\n");
    }

return (EXIT_SUCCESS);
}
你能帮我解决这个问题吗


谢谢

您不能像这样在C中分配数组。但在您的情况下,您可以在声明时初始化:

int main(int argc, char** argv) {
    int i,j,columna,n,m;
    char sala_cine[X][Y] =
    {
        {' ',1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},
        {'1',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'2',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'3',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'4',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'5',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'6',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'7',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
        {'8',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}
    };
    for (i=0;i<X;i++){
        for(j=0;j<Y;j++)
            printf("%c",sala_cine[i][j]);
        printf("\n");
    }

    return (EXIT_SUCCESS);
}

另外,打印的for循环有一个bug,正如@Eugene所指出的那样,

对于C11,代码可以为sala_cine分配一个复合文本,它现在是一个指针

  sala_cine = (char [X][Y]) { ... } // see below
注意:打印字符将打印控制字符,而不是数字“1”


在C语言中,不能一步声明一个数组,以后再初始化它。正如您尝试的那样:

// WRONG
char sala_cine[X][Y];          // Declaration Step
sala_cine[X][Y]=    {  .... }; // Initialization Step
相反,您必须立即执行此操作:

// Correct
char sala_cine[X][Y] = { .....};          // Declaration and Initialization at once.
您想要打印sala_cine[i][j],而不是sala_cine[X][Y]。我希望你已经定义了X,Y,你混合了char和int值:'1'是一个表示1的字符,1是一个特殊字符,而不是字符1。
// WRONG
char sala_cine[X][Y];          // Declaration Step
sala_cine[X][Y]=    {  .... }; // Initialization Step
// Correct
char sala_cine[X][Y] = { .....};          // Declaration and Initialization at once.