C - 扫描矩阵阵列并将其发送到函数?

时间:2013-11-04 16:37:45

标签: c

我正在尝试让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;
}

2 个答案:

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

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

    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. 更多,我想你应该找出参数和参数(OR形式参数和实际参数)。

答案 1 :(得分:0)

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

  • 分配空间以保持玩家的移动。由于有两个玩家,并且移动将是(x,y)坐标,因此您将需要一个2x2阵列。您还需要确定阵列的数据类型。由于有关于游戏区域大小的信息,我选择了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]);
        }
    }