我正在尝试让get_move()扫描玩家1或玩家2在xy坐标矩阵上的移动。
get_move()将有两个参数。首先是两位球员中的哪一位进行移动(球员1或球员2)。第二个参数是move,它必须是一个数组。
我不明白的是我应该如何从main函数扫描移动,然后将其作为参数发送到get_move()。我的意思是get_move()会扫描移动,但是get_move()中的一个参数将是扫描的xy坐标数组?!
#include <stdio.h>
void get_move(int player, char input[])
{
printf("Player %d, make your move: ");
scanf("%d %d", &input[][]);
}
int main(void)
{
int player = 1;
get_move(player, ???); // I can't scan the coordinates and insert them as the second parameter, because the function is supposed to make the scan???
getchar();
return 0;
}
答案 0 :(得分:1)
假设input[0]
为x且input[1]
为y。
所以在主要功能中:
int main(void)
{
int td[2], player = 1;
get_move(player, td);
return 0;
}
get_move(int player, int* td)
:
void get_move(int player, int* td)
{
printf("player...%d\n", player);
scanf("%d %d", &td[0], &td[1]);
printf("x..%d\ny..%d\n", td[0], td[1]);
}
U应该定义一个结构,(更好的数据结构可以降低编码的复杂性)
struct tdim_corrdinate {
int x;
int y;
};
typedef struct tdim_corrdinate two_dim;
现在您可以将此结构传递给函数get_move()
,例如:
void get_move(int player, two_dim td)
{
printf("Player %d, make your move: ", player);
scanf("%d %d", &td.x, &td.y);
// more operations.
}
int main(void)
{
int player = 1;
two_dim td;
get_move(player, td);
return 0;
}
更多,我想你应该找出参数和参数(OR形式参数和实际参数)。
答案 1 :(得分:0)
您提供的示例代码存在一些问题。我们来看看每一个,一次一个:
int
。int input[2][2];
根据输入数组的数据类型调整scanf
的格式字符串。如果您使用int
作为数据类型,则可以使用%d
作为scanf
中的格式字符串。如果您使用的是chars,请使用%c
作为格式字符串。有关格式字符串的详细信息,请参阅scanf。
注意如何声明数组以及如何使用它们。请注意我在input
中的数组scanf
后面不使用空括号。将其与您的scanf
行进行比较。可以在函数签名(例如get_move(...)
)中使用空括号将现有数组传递给函数。在这种情况下,当您想要告诉scanf
将x和y坐标放在数组中时,需要将两个指针传递给scanf函数。 &
运算符为您提供指向其前面的变量的指针。这里input[0]
和intput[1]
是我们感兴趣的指针变量。
scanf("%d %d", &input[0], &input[1]);
固定代码
#include <stdio.h>
void get_move(int player, int input[]) {
char temp = 0;
printf("Player %i\'s move? ", player);
scanf("%d %d", &input[0], &input[1]);
// capture the user pressing the return key, which creates a newline
scanf("%c", &temp);
}
int main() {
int input[2][2];
int i; // index into the player array
// read players' moves
for (i = 0; i < 2; i++) {
get_move(i, input[i]);
}
// print players' moves
for (i = 0; i < 2; i++) {
printf("player %i: %d %d\n", i, input[i][0], input[i][1]);
}
}