2
respostas

Segui o código da aula a risca e ele apresenta erros ao compilar ...

Não estou conseguindo. Na hora de compilar, apenas a palavra M aparece como correta. A letra A fica como errado.

#include <iostream>
#include <string>
using namespace std;

const string PALAVRA_SECRETA = "Melancia";

bool letra_existe(char chute) {
    for(int i=0; i<PALAVRA_SECRETA.size();i++) {
        if(chute==PALAVRA_SECRETA[i]) {
            return true;
        }
     }
     return false;
}



int main() {

    cout << PALAVRA_SECRETA << endl;    

    bool nao_acertou = true;
    bool nao_enforcou = true;

    while(nao_acertou && nao_enforcou) {
        char chute;
        cin >> chute;

        if(letra_existe(chute) ) {
            cout << "\n Seu chute está na palavra! " << endl;
        }
        else {
            cout << " Você errou! " << endl;
        }
    }
}
2 respostas

Tente digitar as letras na mesma caixa que a palavra secreta. Caracteres maiúsculos e minúsculos de uma mesma letra possuem uma representação interna distinta; apenas a título de curiosidade 'm' tem o código ASCII 109, ao passo que 'M' tem código 77. Se você quiser fazer com que o código funcione com caracteres em ambas as caixas, escreva a palavra secreta em caixa alta, e altere o condicional da função letra_existe para:

isalpha(chute) != 0 && toupper(chute) == PALAVRA_SECRETA[i]

Tente o código abaixo:

#include <string>
#include <iostream>

const std::string PASSWORD = "MELANCIA";

bool isPresent(char);

std::string const& getStatusOf(char);

int main() {
    std::cout << PASSWORD << '\n';

    bool HAS_FAILED = true;
    bool NOT_HANGED = true;

    while(HAS_FAILED && NOT_HANGED) {
        char guess;
        std::cin >> guess;

        std::cout << '\n' << getStatusOf(guess) << '\n';
    }

    return 0;
}

inline std::string const& getStatusOf(char guess) {
    static const std::string HIT = "Seu chute está na palavra!";
    static const std::string MISS = "Você errou!";

    return isPresent(guess) ? HIT : MISS;
}

bool isPresent(char guess) {
    for (int i = 0; i < PASSWORD.size(); i++)
        if (isalpha(guess) != 0 && toupper(guess) == PASSWORD[i])
            return true;
    return false;
}

Deu certo. Muito agradecido.