0

get_move() を作成して、xy 座標を持つマトリックス上でプレーヤー 1 またはプレーヤー 2 の動きをスキャンしようとしています。

get_move() には 2 つのパラメーターがあります。最初の 1 つは、2 人のプレイヤーのどちらが移動するか (プレイヤー 1 またはプレイヤー 2) です。2 番目のパラメータは移動であり、配列でなければなりません。

私が理解していないのは、メイン関数から移動をスキャンし、それをパラメーターとして get_move() に送信する方法です。つまり、移動をスキャンするのは get_move() ですが、get_move() のパラメーターの 1 つがスキャンされた 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 でy であるとしましょうinput[1]

メイン関数で:

     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

あなたが提供したサンプルコードにはいくつかの問題があります。それぞれを 1 つずつ見ていきましょう。

  • プレイヤーの動きを維持するためのスペースを割り当てます。2 人のプレイヤーがいて、移動は (x, y) 座標になるため、2x2 配列が必要になります。配列のデータ型も決定する必要があります。プレイエリアの広さの情報があるので、 を選びintました。
int input[2][2];
  • scanf入力配列のデータ型に基づいて、フォーマット文字列を調整します。intデータ型として を使用している場合は%d、 のフォーマット文字列として使用できますscanf。代わりに chars を使用%cしている場合は、フォーマット文字列として使用してください。フォーマット文字列の詳細については、 scanfを参照してください。

  • 配列の宣言方法とその使用方法に注意してください。inputの配列の後に空の括弧を使用しないことに注意してくださいscanf。それをあなたのラインと比較してくださいscanf。関数シグネチャ ( などget_move(...)) で空の括弧を使用して、既存の配列を関数に渡すことができます。この場合、scanfx 座標と y 座標を配列に入れるように指示したい場合は、scanf 関数に 2 つのポインターを渡す必要があります。演算子は、&先行する変数へのポインターを提供します。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 に答える