polska Posted April 25, 2012 at 05:48 PM Report #451423 Posted April 25, 2012 at 05:48 PM 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.
pmg Posted April 25, 2012 at 05:53 PM Report #451425 Posted April 25, 2012 at 05:53 PM 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!
polska Posted April 25, 2012 at 05:55 PM Author Report #451426 Posted April 25, 2012 at 05:55 PM 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.
pmg Posted April 25, 2012 at 05:58 PM Report #451429 Posted April 25, 2012 at 05:58 PM 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!
polska Posted April 25, 2012 at 06:01 PM Author Report #451431 Posted April 25, 2012 at 06:01 PM 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.
bsccara Posted April 25, 2012 at 06:48 PM Report #451442 Posted April 25, 2012 at 06:48 PM 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'.
polska Posted April 25, 2012 at 10:01 PM Author Report #451484 Posted April 25, 2012 at 10:01 PM Não sabia dessa função, obrigado pela dica ;D Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
pmg Posted April 25, 2012 at 10:21 PM Report #451487 Posted April 25, 2012 at 10:21 PM 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!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now