Meu jogo tem apresentado um problema quando roda. Toda vez que o usuário chuta alguma letra, mesmo que ele tenha acertado, o jogo exibe "\nVoce errou, a palavra nao tem %c\n" além de contar um erro sem que o usuário tenha errado. Comparei com o código do professor mas não encontrei nenhum erro.
char palavraSecreta[TAMANHO_PALAVRA];
char chutes[26];
int chutesdados = 0;
void abertura(){
printf("********************************\n");
printf("*********Jogo de forca**********\n");
printf("********************************\n\n");
}
int letraExiste(char letra){
for(int j = 0; j < strlen(palavraSecreta); j++){
if(letra == palavraSecreta[j]){
return 1;
}
}
return 0;
}
int chutesErrados(){
int erros = 0;
for(int i = 0; i < chutesdados; i++){
if(!letraExiste(chutes[i])){
erros++;
}
}
return erros;
}
int enforcou(){
return chutesErrados() >= 5;
}
int acertou(){
for(int i = 0; i < strlen(palavraSecreta); i++){
if(!jachutou(palavraSecreta[i])){
return 0;
}
}
return 1;
}
void chuta(){
char chute;
printf("\nChute uma letra\n");
scanf("%c", &chute);
if(letraExiste(chute)){
printf("\nVoce acertou, a palavra tem %c\n", chute);
}else{
printf("\nVoce errou, a palavra nao tem %c\n", chute);
}
chutes[chutesdados] = chute;
(chutesdados)++;
}
int jachutou(char letra) {
int achou = 0;
for(int j = 0; j < chutesdados; j++){
if(chutes[j] == letra){
achou = 1;
break;
}
}
return achou;
}
void desenhaforca(){
int erros = chutesErrados();
printf("\n\n");
printf(" _______ \n");
printf(" |/ | \n");
printf(" | %c%c%c \n", (erros >= 1 ? '(' : ' '), (erros >= 1 ? '_' : ' '), (erros >= 1 ? ')' : ' '));
printf(" | %c%c%c \n", (erros >= 2 ? '/' : ' '), (erros >= 2 ? '|' : ' '), (erros >= 2 ? '\\' : ' '));
printf(" | %c \n", (erros >= 3 ? '|' : ' '));
printf(" | %c %c \n", (erros >= 4 ? '/' : ' '), (erros >= 4 ? '\\' : ' '));
printf(" | \n");
printf("_|___ \n");
printf("\n\n");
for( int i = 0; i < strlen(palavraSecreta); i++){
if(jachutou(palavraSecreta[i])) {
printf("%c ", palavraSecreta[i]);
} else {
printf("_ ");
}
}
printf("\n");
}
void escolhePalavra(){
FILE * f;
f = fopen("palavras.txt", "r");
if(f==0){
printf("ERRO\n");
exit(1);
}
int qtdpalavras;
fscanf(f, "%d", &qtdpalavras);
srand(time(0));
int randomico = rand() % qtdpalavras;
for(int i = 0; i <= randomico; i++){
fscanf(f, "%s", palavraSecreta);
}
fclose(f);
}
int main(){
abertura();
escolhePalavra();
do {
desenhaforca();
chuta();
} while(!acertou() && !enforcou());
if(acertou()){
printf("\nParabens, voce ganhou!\n");
}else{
printf("\nPuxa, você foi enforcado!\n");
printf("A palavra era **%s**\n\n", palavraSecreta);
}