【发布时间】:2020-04-08 21:29:24
【问题描述】:
我正在编写一个游戏“井字游戏” 我要求每个玩家在两个不同的函数中输入他们的下一步动作, 然后我将他们的动作保存在二维数组中,并将这个数组保存在主函数中的另一个二维数组中。 但是当我打印数组时,它会在第二个玩家进入下一步时更改字符符号。 PS:这是一个字符数组。 这是我的代码
char player1(char board[N][N], int n)
{
int k, l;
print_player_turn(1);
scanf("%d%d", &k, &l);
board[k - 1][l - 1] = 'X';
print_board(board, n);
return board;
}
char player2(char board[N][N], int n)
{
int k, l;
print_player_turn(2);
scanf("%d%d", &k, &l);
board[k - 1][l - 1] = 'O';
print_board(board, n);
return board;
}
int main()
{
char board[N][N];
int n;
print_welcome();
print_enter_board_size();
scanf("%d", &n);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
board[i][j] = '_';
print_board(board, n);
char* ptr = board;
while (isFull(board,n)==0)
{
board[0][0] = player1(board, n);
if (XloseGeneral(board, n) == 1)
{
print_winner(2);
return 0;
}
board[0][0] = player2(board, n);
if (OloseGeneral(board, n) == 1)
{
print_winner(1);
return 0;
}
}
print_tie();
}
【问题讨论】:
-
数组总是作为指针传递给函数。因此,您在函数内的数组中所做的任何更改都将反映在 main.js 中。这基本上意味着您不需要返回数组并且分配
board[0][0] =是完全没有必要的。除此之外,我没有看到任何明显的问题。 -
您的编译器应该对函数
player1和player2显示警告,因为您尝试返回错误的类型。 (函数应该返回char,而不是char[][]。)在C 中,数组是通过引用传递的,因此您不需要返回修改后的board。你想用board[0][0] = player1(board, n);实现什么?目前它将数组中第一个字符的地址转换为char,并将其存储在数组中[0][0]的位置。请edit您的问题以添加更多信息。将返回类型更改为void并删除return语句。