Oii, Claudio! Como vai?
Você trouxe uma questão importante! Seu código está comparando letras exatamente como foram digitadas, então se a palavrasecreta
está em maiúsculas e a pessoa digita uma letra minúscula, a comparação não vai funcionar.
O que fazer?Use a função toupper()
da biblioteca <ctype.h>
para transformar o chute em maiúscula antes de comparar. Assim, tanto faz se a pessoa digitar a
ou A
, por exemplo.
Eu fiz assim no meu projeto, você pode ter uma ideia pra aplicar no seu:
#include <stdio.h>
#include <string.h>
#include <ctype.h> // para usar toupper()
int enforcou = 0;
int acertou = 0;
int letra_existe(char letra, char* palavra) {
for(int j = 0; j < strlen(palavra); j++) {
if(palavra[j] == letra) {
return 1;
}
}
return 0;
}
int ganhou(char* palavra, char* chutes, int tentativas) {
for(int i = 0; i < strlen(palavra); i++) {
int achou = 0;
for(int j = 0; j < tentativas; j++) {
if(chutes[j] == palavra[i]) {
achou = 1;
break;
}
}
if(!achou) return 0;
}
return 1;
}
int main() {
char palavrasecreta[20];
sprintf(palavrasecreta, "MELANCIA");
char chutes[26];
int tentativas = 0;
int erros = 0;
do {
for(int i = 0; i < strlen(palavrasecreta); i++) {
int achou = 0;
for(int j = 0; j < tentativas; j++) {
if(chutes[j] == palavrasecreta[i]) {
achou = 1;
break;
}
}
if(achou) {
printf("%c ", palavrasecreta[i]);
} else {
printf("_ ");
}
}
printf("\n");
char chute;
printf("Qual letra? ");
scanf(" %c", &chute);
chute = toupper(chute); // transforma em maiúscula
chutes[tentativas] = chute;
tentativas++;
if(!letra_existe(chute, palavrasecreta)) {
erros++;
}
acertou = ganhou(palavrasecreta, chutes, tentativas);
enforcou = erros >= 6;
} while (!acertou && !enforcou);
if(acertou) {
printf("Parabens! Voce ganhou :)\n");
} else {
printf("Voce perdeu! A palavra era %s\n", palavrasecreta);
}
return 0;
}
O que esse trecho faz:
chute = toupper(chute);
Transforma a letra digitada para maiúscula antes de guardar no array chutes
.Assim, você padroniza a entrada e evita problemas de comparação com a palavra "MELANCIA"
.
Lembre de salvar e gerar o arquivo executável com:
gcc forca.c -o forca
Assim as mudanças serão aplicadas.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!