2010-11-09 36 views
1

此代碼有什麼問題?當我嘗試將結構指針傳遞給函數時出現問題

typedef struct jogador{ 
    char nome[7]; 
    int pecas[6][2]; 
}Jogador; 

void distribuir_pecas(Jogador* jogadores); 

int main() 
{ 
    Jogador* jogadores; 
    jogadores = (Jogador*) malloc(4 * sizeof(Jogador)); 
    distribuir_pecas(jogadores); 
    return 0; 
} 
void distribuir_pecas(Jogador* jogadores){ 
    int domino[28][2]; 
    int vetor_aux[28]; 

    int i, j; 
    int peca_sorteada; 
    int num_jogador = 0; 
    int num_domino = 0; 
    srand(time(NULL)); 

    for(i = 0; i < 28; i++){ 
     vetor_aux[i] = 1; 
    } 
    for(i = 0 ; i < 7; i++){ 
     for(j = 0; j < 7; j++){ 
      if(j == 0){ 
       j = i; 
      } 
      domino[num_domino][0] = i; 
      domino[num_domino][1] = j; 
      //printf("%d*%d\n", domino[num_domino][0], domino[num_domino][1]); 
      num_domino++; 
     } 
    } 

    while(num_jogador < 4){ 
     for(i = 0; i < 6;){ 
      peca_sorteada = rand()%28; 
      if(vetor_aux[peca_sorteada]){ 

       vetor_aux[peca_sorteada] = 0; 
       jogadores[num_jogador].pecas[i][0] = domino[peca_sorteada][0]; 
       jogadores[num_jogador].pecas[i][1] = domino[peca_sorteada][1]; 
       i++; 
       printf("[%d|%d]\n",jogadores[num_jogador].pecas[i]      [0],jogadores[num_jogador].pecas[i][1]); 
      } 
     } 
     printf("\n\n"); 
     num_jogador++; 
    } 
} 

當我嘗試等同domino[peca_sorteada][0]jogadores[num_jogador].pecas[i][0],對於爲例,使用->操作編譯錯誤ocurrs,但.操作中的printf打印不正確的值。爲什麼????

+0

請澄清你的問題。給出一些不起作用的代碼的例子,並給出它產生的輸出。另外,請簡化您的代碼示例(我們是否真的需要查看所有這些循環,以及malloc等?) – 2010-11-09 01:11:21

回答

3

不知道這是根本的問題,但這:

int domino[28][2]; 
.... 
for(i = 0 ; i < 7; i++){ 
    for(j = 0; j < 7; j++){ 
     if(j == 0){ 
      j = i; 
     } 
     domino[num_domino][0] = i; 
     domino[num_domino][1] = j; 
     //printf("%d*%d\n", domino[num_domino][0], domino[num_domino][1]); 
     num_domino++; 
    } 
} 

將會給你帶來的問題。 num_domino將在此雙循環結束時爲49,但domino陣列只有28個元素長。

+0

好的,但我不在後面的代碼中使用num_domino – adriano 2010-11-09 01:26:24

+1

您*在循環內部使用它,但是。而你正在寫給那些超出界限的「多米諾骨牌」元素。 – 2010-11-09 01:32:06

+0

這是真正的卡梅隆。在打印「jogadores」的內容之前,我正在增加「我」。謝謝! – adriano 2010-11-09 01:56:07