这段代码有什么问题?
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不打印正确的价值。为什么????
答案 0 :(得分: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个元素。