2013-11-04 56 views
0

我試圖讓get_move()掃描玩家1或玩家2在xy座標矩陣上的移動。C - 掃描矩陣數組並將其發送給函數?

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; 
} 
+0

注:考慮檢查結果:'如果(2 = scanf函數(」! %d%d「,&input [0],&input [1]))handle_error();',或者更好,使用'fgets()/ sscanf()'組合。 – chux

回答

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. 更多的,我覺得你應該找出參數和參數(或形式參數和實際參數)。

+0

謝謝,但事情是我必須使用數組來獲得xy座標。我一直沒有看結構,在這個特殊的遊戲中,我不得不使用數組。 – user2952320

0

您提供的示例代碼有幾個問題。讓我們來看看他們每個人,一次一個:

  • 分配一個空間來保持玩家的移動。由於有兩個玩家,並且該移動將是一個(x,y)座標,您將需要一個2x2數組。您還需要確定數組的數據類型。由於有關於遊樂區大小的信息,我選擇了int
int input[2][2]; 
  • 調整根據您的輸入數組的數據類型爲scanf格式字符串。如果您使用int作爲數據類型,則可以使用%d作爲scanf中的格式字符串。如果您使用的是字符,請使用%c作爲格式字符串。有關格式化字符串的更多信息,請參閱scanf

  • 注意如何聲明數組,然後如何使用它們。請注意,我如何不使用中的數組input後面的空括號。將它與您的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]); 
     } 
    }