c - 解析并返回二维数组
问题描述
尝试制作井字游戏并遇到网格问题,我是 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");
}
我如何将网格解析为一个函数并在程序不崩溃的情况下返回它?
解决方案
您已经在 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 );
推荐阅读
- python-3.x - NameError:名称“指标”未定义
- python - How to refer Environment variables mentioned in openshift deployment, inside python code running in the pod of same deployment
- php - Laravel 急切加载查询问题
- javascript - 是否有任何查询可以从 mongodb 中查找记录,该记录将忽略数据库中的空格
- c# - 如何在 ASP.Net 标记中定义 c# 版本
- reactjs - 从本地文件存储播放声音
- javascript - 如果我在“url”地址中有“perPage = 20”(获取 20)并且有 1000 个元素,如何检查数组长度?
- tailwind-css - 保持一列固定,而其他滚动
- javascript - 身体触摸动作:无,但可以捏缩放一个 div
- ios - “清单签名未验证成功”