1
resposta

Erro

Olá, poderia me dizer onde esta o erro no meu código?


#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <stdbool.h>
#include <map>

using namespace std;
const string PALAVRASECRETA = "MELANCIA";
map <char, bool> chutou;


bool letraexiste (char chute){
    for(char letra : PALAVRASECRETA){
        if(chute == letra){
            return true;
    }else{
        return false;
        }
    }
}


 int main(){

     cout << "***********************";
     cout << "**** Jogo da Forca ****";
     cout << "***********************";
     cout << endl;

bool naoacertou = true;
bool naoenforcou = true;

    while(naoacertou && naoenforcou){
        for(char letra = PALAVRASECRETA){
            if (chutou[letra]){
                cout << letra << " ";
            }
            else{
                cout << "_ ";
            }
        }
    cout << endl;

cout << "Digite seu chute: ";
char chute;
cin >> chute;

chutou[chute] = true;

    if(letraexiste(chute)){
        cout << " Voce acertou uma letra " << endl;
}else{
    cout << "Voce errou uma letra " << endl;
}

return 0;
    }
1 resposta

Olá Natasha, tudo bem?

Seu código está praticamente certo, foi só um erro de digitação ali que prejudicou a compilação dele. Isso é super normal, acontece comigo direto kkk. Veja bem, ali no for, dentro do while foi digitado char letra = PALAVRASECRETA, mas pro for funcionar corretamente precisa ser char letra: PALAVRASECRETA. Só trocar o "=" por ":".

Outro detalhe que percebi é que faltou fechar a chave do while. É só colocar um "}" antes do return 0. Uma ultima coisa é que na sua função letraexiste ela apenas vai funcionar para ler o primeiro caracter da PALAVRASECRETA, pois tem um else com return false dentro do for. Então se a letra que foi digitada no teclado for diferente do primeiro caractere da PALAVRASECRETA ele automaticamente já vai retornar false, não procurando as outras letras da palavra. Uma forma simples de resolver isso é fazendo essa pequena mudança:

bool letraexiste (char chute){
    for(char letra : PALAVRASECRETA){
        if(chute == letra){
            return true;
        }
    }
    return false;
}

Vou deixar o seu código com essas pequenas mudanças que comentei corrigidas aqui embaixo, caso tenha fica confuso alguma parte da minha explicação:

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <stdbool.h>
#include <map>

using namespace std;
const string PALAVRASECRETA = "MELANCIA";
map<char, bool> chutou;

bool letraexiste(char chute)
{
    for (char letra : PALAVRASECRETA)
    {
        if (chute == letra)
        {
            return true;
        }
    }
    return false;
}

int main()
{

    cout << "***********************";
    cout << "**** Jogo da Forca ****";
    cout << "***********************";
    cout << endl;

    bool naoacertou = true;
    bool naoenforcou = true;

    while (naoacertou && naoenforcou)
    {
        for (char letra : PALAVRASECRETA)
        {
            if (chutou[letra])
            {
                cout << letra << " ";
            }
            else
            {
                cout << "_ ";
            }
        }
        cout << endl;

        cout << "Digite seu chute: ";
        char chute;
        cin >> chute;

        chutou[chute] = true;

        if (letraexiste(chute))
        {
            cout << " Voce acertou uma letra " << endl;
        }
        else
        {
            cout << "Voce errou uma letra " << endl;
        }
    }
    return 0;
}

Espero ter ajudado! Qualquer coisa é só falar ;)

Bons estudos!