Проблема, когда я пытаюсь передать структурный указатель на функцию - PullRequest
1 голос
/ 09 ноября 2010

Что не так с этим кодом?

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], например, используя операнд ->, возникает ошибка компиляции, но с операндом .printf не печатает правильное значение.Зачем????

1 Ответ

3 голосов
/ 09 ноября 2010

Не уверен, что это основная проблема, но это:

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 элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...