首页 > 解决方案 > 解析并返回二维数组

问题描述

尝试制作井字游戏并遇到网格问题,我是 C 的新手,到处都看过,但似乎没有任何效果。

int main(void) {
    char grid[GRID_HEIGHT][GRID_WIDTH];
    grid = make_grid((char **)grid);
    print_grid((char **)grid);
}

char ** make_grid(char **grid) {
    char grid[GRID_HEIGHT][GRID_WIDTH] = {
        { '\n', ' ', '1', ' ', '|', ' ', '2', ' ', '|', ' ', '3', ' ' } ,
        { '\n', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-' } ,
        { '\n', ' ', '4', ' ', '|', ' ', '5', ' ', '|', ' ', '6', ' ' } ,
        { '\n', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-' } ,
        { '\n', ' ', '7', ' ', '|', ' ', '8', ' ', '|', ' ', '9', ' ' }
    };
    return grid;
}

void print_grid(char **grid) {
    for (int row = 0; row < GRID_HEIGHT; row++) {
        for (int column = 0; column < GRID_WIDTH; column++) {
            printf("%c", grid[row][column]);
        }
    }
    printf("\n");
}

我如何将网格解析为一个函数并在程序不崩溃的情况下返回它?

标签: cfunctionmultidimensional-arraydeclaration

解决方案


您已经在 main.xml 中声明了数组网格。

char grid[GRID_HEIGHT][GRID_WIDTH];

所以例如这个函数定义

char ** make_grid(char **grid) {
    char grid[GRID_HEIGHT][GRID_WIDTH] = {
        { '\n', ' ', '1', ' ', '|', ' ', '2', ' ', '|', ' ', '3', ' ' } ,
        { '\n', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-' } ,
        { '\n', ' ', '4', ' ', '|', ' ', '5', ' ', '|', ' ', '6', ' ' } ,
        { '\n', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-' } ,
        { '\n', ' ', '7', ' ', '|', ' ', '8', ' ', '|', ' ', '9', ' ' }
    };
    return grid;
}

至少没有意义,因为参数是在函数的外部块范围内重新声明的。

该函数可能如下所示

void make_grid( char ( *grid )[GRID_WIDTH] )
{
    static const char *rows[] = 
    {
        { "\n 1 | 2 | 3 " } ,
        { "\n-----------" } ,
        { "\n 4 | 5 | 6 " } ,
        { "\n-----------" } ,
        { "\n 7 | 8 | 9 " }
    };
    const size_t N = sizeof( rows ) / sizeof( *rows );

    for ( size_t i = 0; i < N; i++ )
    {
        strncpy( grid[i], rows[i], GRID_WIDTH );
    }
}

并称为

make_grid( grid );

该函数print_grid可以定义为

void print_grid( char ( *grid )[GRID_WIDTH], size_t height ) 
{
    for ( size_t row = 0; row < height; row++) {
        for ( size_t column = 0; column < GRID_WIDTH; column++) {
            printf("%c", grid[row][column]);
        }
        putchar( '\n' );
    }
    putchar( '\n' );
}

并称为

print_grid( grid, GRID_HEIGHT );

推荐阅读