Estava com um erro de ter incluindo algumas variaveis com cpp ao invés de hpp, mas agora meu jogo não funciona direito, eu coloco a letra correta e mesmo assim o chute dá como errado, alguém sabe o que pode ser?
Estava com um erro de ter incluindo algumas variaveis com cpp ao invés de hpp, mas agora meu jogo não funciona direito, eu coloco a letra correta e mesmo assim o chute dá como errado, alguém sabe o que pode ser?
Oi, Enzo! Tudo bem?
Precisamos que você envie o código completo no git hub, assim podemos fazer testes para te ajudar.
Fico no aguardo. Abraços e bons estudos!
Olá Lorena, tudo certo e você?
Desculpe não sabia, eu criei o projeto lá no github, não sei se fiz da maneira certa porque não entendo nada dessa plataforma, qualquer coisa me avise!
https://github.com/oenzosantos/forca.git
Oi, Enzo.
Consegui acessar seu código, obrigada!
Você estava usando letras minúsculas? Pois quando testei seu código usando minúsculas, ele não funcionava. Mas se eu usava maiúscula funcionava certinho.
Isso acontece porque, para o computador, uma letra minúscula é completamente diferente de uma letra maiúscula. É muito comum passar por isso quando estamos aprendendo a lidar com textos!
Internamente, o C++ usa uma tabela numérica (chamada ASCII) para representar letras. Por exemplo:
Como as palavras no seu arquivo palavras.txt estão todas em maiúsculas (ex: "ABACAXI"), quando você digita 'a', o programa compara 97 com 65, vê que são diferentes e diz que você errou.
A solução:
Para corrigir isso, precisamos forçar o chute a virar maiúsculo assim que o usuário digita, antes de fazer qualquer verificação. Vamos usar a função toupper() (que significa to upper case - para caixa alta).
Seu código ajustado. Note que adicionei uma nova biblioteca e uma linha de comando:
#include <iostream>
#include <vector>
#include <map>
#include <cctype> // 1. Incluímos esta biblioteca para mexer com tipos de caracteres
#include "letra_existe.hpp"
extern std::map<char, bool> chutou;
extern std::vector<char> chutes_errados;
void chuta(){
std::cout << "Seu chute: ";
char chute;
std::cin >> chute;
// 2. A Mágica acontece aqui:
// Transformamos o chute em maiúsculo logo após ler
chute = toupper(chute);
chutou[chute] = true;
if(letra_existe(chute)){
std::cout << "Você acertou! Seu chute está na palavra." << std::endl;
}
else{
std::cout << "Você errou! Seu chute não está na palavra." << std::endl;
chutes_errados.push_back(chute);
}
std::cout << std::endl;
}
O que mudou?
#include <cctype>: Essa biblioteca contém ferramentas padrões do C++ para manipular caracteres.chute = toupper(chute);: Essa linha pega o que o usuário digitou e converte para maiúsculo.letra_existe e o mapa chutou) sempre receberá a letra no formato correto para comparar com o seu arquivo de texto.Ao testar tudo funciona:
Espero ter ajudado.