2010-11-09 4 views
1

Quel est le problème avec ce code?Problème lorsque j'essaie de passer un pointeur struct à une fonction

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

Lorsque je tente assimiler domino[peca_sorteada][0]-jogadores[num_jogador].pecas[i][0], pour exemple, en utilisant un opérande -> un ocurrs d'erreur de compilation, mais avec . opérande printf n'imprime pas la valeur correcte. Pourquoi????

+0

Veuillez clarifier votre question. Donnez un exemple de code qui ne fonctionne pas et donnez la sortie qu'il produit. Aussi, s'il vous plaît simplifier votre exemple de code (avons-nous vraiment besoin de voir toutes ces boucles, et les mallocs, etc?) –

Répondre

3

Je ne sais pas si cela est le problème sous-jacent, mais ceci:

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

va vous causer des problèmes. num_domino sera 49 à la fin de cette double boucle, mais le tableau domino ne contient que 28 éléments.

+0

OK, mais je n'utilise pas num_domino plus tard dans ce code – adriano

+1

Vous * l'utilisez * dans la boucle , bien que. Et vous écrivez à des éléments de 'domino' qui sont en dehors de ses limites. –

+0

C'est vrai Cameron. Je suis augmenter 'je' avant d'imprimer le contenu de 'jogadores'.Merci! – adriano

Questions connexes