将用户输入的值从一个函数传递到另一个C时出现问题

时间:2018-10-27 21:04:16

标签: c

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

这是我的主要功能,在其中声明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函数,在这里我得到将要进入行和列的值。

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。因此出于某种原因,我可以t获取要传递给该函数的值。这是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。

1 个答案:

答案 0 :(得分:1)

程序中存在多个问题。

首先让我们了解您的printf()呼叫输出0, 0的原因。参数rowcol都是通过值传递的局部变量。这意味着如果e。 G。 row变量get通过get_player1_move()调用在scanf()函数内更改,在get_player1_move()函数外部未更改。因此,row函数中的变量main()保持不变。

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