• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

lightningspirit

Ajuda com função que não faz o que devia!

4 mensagens neste tópico

Olás! Será que alguém me pode ajudar a encontrar um nesta função?

Eu tenho como estruturas:

typedef struct 
{
int colunas;
int linhas;
char tabuleiro[10][10];
} Tabuleiro; 

typedef struct
{
char jogador[256];
int nivel_dificuldade;
Estado estado_do_jogo;
Tabuleiro tabuleiro;
} Jogo;

e tenho a seguinte função que é chamada por uma outra. Sei que o erro está aqui, mas não consigo perceber onde.

int verificaQuatroMarcas(Tabuleiro *tabuleiro, char marca)
{
int coluna, linha;
for(coluna=1;coluna<=(tabuleiro->colunas);coluna++)
{
	for(linha=1;linha<=(tabuleiro->linhas);linha++)
	{	
		if(maiorAdjacente(tabuleiro,marca,coluna,linha)>3) { return TRUE;  }
		else printf("\nVerificado!");
	}
}
return FALSE;
}

Tomando, anteriormente, valores arbitrários para colunas e linhas, a função deveria mostrar a mensagem verificado para cada uma das posições da matriz tabuleiro (colunas * linhas) porém isso não acontece, só apresenta no ecrã "linhas" vezes. Presumo que ela só lê para as posições da coluna 1 e descarta as outras, porque razão, alguém me sabe dizer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faz um debug.

Outra alternativa, coloca um printf("TRUE"); antes do return TRUE;

Pode estar a acontecer que a função maiorAdjacente(...) não retorne o que deveria. E uma das causas é o facto de estares a usar tipo

linha=1;linha<=(tabuleiro->linhas)

em vez de

linha=0;linha<(tabuleiro->linhas)

mas isso depende do valor que atribuires a tabuleiro->linhas.

Da mesma forma para coluna.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, vou ver então, é possível que o problema esteja dentro do for... Obrigado! ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só para acrescentar ao post do shumy: tabuleiro[10][10] vai de tabuleiro[0][0] a tabuleiro[9][9] e não de tabuleiro[1][1] a tabuleiro[10][10], por isso Tabuleiro->linhas e Tabuleiro->colunas nunca deverão ter valores superiores a 9 quando estás a utilizar o <=

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora