0

我正在尝试让 get_move() 扫描玩家 1 或玩家 2 在具有 xy 坐标的矩阵上的移动。

get_move() 将有两个参数。第一个将是两个玩家中的哪一个正在移动(玩家 1 或玩家 2)。第二个参数是移动,它必须是一个数组。

我不明白的是我应该如何从主函数扫描移动,然后将其作为参数发送到 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;
}
4

2 回答 2

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]);
      }

  1. 你应该定义一个结构,(更好的数据结构可以降低你编码的复杂度)

    struct tdim_corrdinate {
        int x;
        int y;
    };
    
    typedef struct tdim_corrdinate two_dim;
    
  2. 现在您可以将此结构传递给您的函数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;
    }
    
  3. 更多,我认为你应该弄清楚参数和参数(或形式参数和实际参数)。

于 2013-11-04T17:01:28.390 回答
0

您提供的示例代码存在一些问题。让我们来看看它们中的每一个,一次一个:

  • 分配一个空间来保持玩家的动作。由于有两个玩家,并且移动将是 (x, y) 坐标,因此您需要一个 2x2 数组。您还需要确定数组的数据类型。由于有关于游乐区大小的信息,我选择了int
int input[2][2];
  • scanf根据输入数组的数据类型调整格式字符串。如果您int用作数据类型,则可以%d用作scanf. 如果您改用字符,请%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]);
        }
    }
于 2013-11-04T17:51:21.067 回答