首页 > 解决方案 > 将用户输入的值从一个函数传递到另一个 C 时出现问题

问题描述

我正在制作井字游戏,当用户输入他们的动作时,我需要确保随机生成的数字与用户不同,以及他们是否要重新生成另一个动作。当我有一个让玩家移动的函数,然后是另一个生成随机移动的函数时,问题就出现了。我似乎无法从 get_player1_move 获取 row 和 col 的值到 generate_player2_move 中。

这是我声明 row 和 col 变量的主要函数。

int main (){
char board[SIZE][SIZE];
int row, col;


clear_table(board);  //Clears the table
display_table(board);  //Display the table
do {
    get_player1_move(board, row, col); 
    printf("%d, %d", row, col);     //Have player 1 enter their move
    generate_player2_move(board, row, col); //Generate player 2 move
} while(check_end_of_game(board) == false); //Do this while the game hasn't ended

print_winner(board); //after game is over, print who won

 return 0;
}

这是 get_player1_move 函数,我在其中获取将进入 row 和 col 的值。

void get_player1_move(char board[SIZE][SIZE], int row, int col) {     //More work; test if game is over

printf("Player 1 enter your selection [row, col]: ");
scanf("%d, %d", &row, &col);

board[row-1][col-1] = 'O';
display_table(board);
}

现在我想将分配给这两个变量的值传递给这个函数,这样我就可以根据随机生成的移动来检查它,但是当我打印出这些值时,它会一直打印 0、0。所以由于某种原因我无法得到传递给此函数的值。这是 generate_player2_move 函数。

void generate_player2_move(char board[SIZE][SIZE], int row, int col) {   //More work; test if game is over, also the check doesn't work

int randrow = 0, randcol= 0;

srand(time(NULL));

randrow= rand() % 3 + 1;

randcol= rand() % 3 + 1;

printf("%d, %d\n", row, col);

if ((randrow != row) && (randcol != col)) {

printf("Player 2 has enterd [row, col]: %d, %d \n", randrow, randcol);

board[randrow - 1][randcol - 1] = 'X';

display_table(board);
}
}

当我运行该函数时 printf("%d, %d\n", row, col); 当我希望它打印用户在上一个函数中输入的值时,继续打印 0, 0。

标签: c

解决方案


您的程序中有多个问题。

printf()首先让我们了解您的呼叫输出的原因0, 0。参数rowcol都是按值传递的局部变量。这意味着如果row变量 getget_player1_move()通过scanf()调用在函数内发生变化,它不会在get_player1_move()函数外发生变化。所以函数row中的变量main()保持不变。

您可以使用按引用传递(指针)来解决这个问题。但问题是您的播放器 2 函数仅检查播放器 1 选择的最后一行和最后一列。但您必须检查所有行和列。否则字段可能会被覆盖。


推荐阅读