Jump to content

Recommended Posts

Posted

Boas pessoal, estou mesmo a acabar o jogo da forca, mas entretanto apareceu-me um erro no programa que não estou a conseguir resolver, eu tenho esta função bool:

bool verifica_adivinha(){
//se o jogador tentar adivinhar a palavra, entao é feita a verificação
nFalhas=6;
if(strcmp(palavra,tentativa)==0){
	return true;
}
if(strlwr(tentativa)==palavra){
	return true;
}
if(strupr(tentativa)==palavra){
	return true;
}
return false;

}

Esta função verifica se a palavra que o jogador tentou adivinhar esta correcta ou não..

Então depois, tenho esta verificação:

if(op1==2){ //caso o jogador tentou adivinhar a palavra
		system("cls");
		r=verifica_adivinha;
		if(!r){
			printf("\nFalhaste!\nA palavra era %s!\nVais ser retirado do jogo, caso este continue.\n",palavra);
			JogadorSubstituir=2;
		}else{
			printf("\nAcertaste! BOA!\n%s vai ser retirado do jogo, caso este continue.\n",j1);
			JogadorSubstituir=1;
		}

O problema aqui é que a função devolve sempre true, ou seja, cai sempre no "Acertaste! BOA!" .. Eu coloquei um breakpoint na função e na verificação para seguir o programa... E quando eu coloco a palavra mal, a função nunca vai ao true, cai sempre no return false, o que esta correcto, mas depois o r toma sempre valor true..

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Posted
		r=verifica_adivinha;

Qual é o tipo de r?

Qual é o tipo de verifica_adivinha?

Segundo me parece, o tipo de r é bool, mas o tipo de verifica_adivinha é bool (*)(). Estes tipos sao incompativeis. Se tivesses o compilador bem configurado ele tinha de te avisar.

Sugestao: toma atencao aos avisos do compilador 😉

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

para ser bool(*) tenho de ter alguma variavel a ser enviada para a função certo? Mas não tenho nada, porque as variaveis estão globais, não preciso..

O r e bool sim.

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Posted

Ok, eu sou mais explicito ...

na instrucao abaixo nao estas a chamar funcao nenhuma.

        r = verifica_adivinha;

Para chamar a funcao precisas de parentesis:

        r = verifica_adivinha();

O tipo de verifica_adivinha() (com os parentesis) é bool (como o de r).

E mantenho a minha sugestao anterior: toma atencao aos avisos do compilador.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

ai jesus, realmente, foi puro esquecimento os () !

Agora já funciona, obviamente 😉

Obrigado ;D

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Posted

Já agora o teu código dentro do 'verifica_linha' não precisa de tantas funções: basta trocar o 'strcmp' pelo 'stricmp', que faz a comparação sem ligar a maiúsculas/minúsculas. Poderás tirar os 'strlwr' e 'strupr'.

Posted

basta trocar o 'strcmp' pelo 'stricmp', que faz a comparação sem ligar a maiúsculas/minúsculas. Poderás tirar os 'strlwr' e 'strupr'.

Não sabia dessa função, obrigado pela dica ;D

Atencao que a funcao stricmp() (assim como as funcoes strlwr() e strupr()) nao é uma funcao Standard, nem sequer POSIX.

Se queres uma funcao POSIX (mesmo assim nao é Standard) usa strcasecmp().

http://pubs.opengroup.org/onlinepubs/9699919799/functions/strcasecmp.html

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.