c - 将用户输入的值从一个函数传递到另一个 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。
解决方案
您的程序中有多个问题。
printf()
首先让我们了解您的呼叫输出的原因0, 0
。参数row
和col
都是按值传递的局部变量。这意味着如果row
变量 getget_player1_move()
通过scanf()
调用在函数内发生变化,它不会在get_player1_move()
函数外发生变化。所以函数row
中的变量main()
保持不变。
您可以使用按引用传递(指针)来解决这个问题。但问题是您的播放器 2 函数仅检查播放器 1 选择的最后一行和最后一列。但您必须检查所有行和列。否则字段可能会被覆盖。
推荐阅读
- git - Git 推送到 Github 后会删除本地文件吗?
- java - Java日期返回1970?
- python - 按字符串属性对对象列表进行排序
- node.js - Firebase 函数获取键名列表
- c# - 如何在 C# 中使用 ConfigurationManager 保存到漫游配置文件
- python - 如何防止 gdal.ReprojectImage 忽略零?
- c# - 试图弄清楚如何在我的代码中传递“字面值 20”
- javascript - 使用 React js Modal 的动态内容
- excel - excel表格中的x/y值列表
- angular - 在 Storybook 中使用 @angular-redux/store 测试 Angular