Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Mostrando a os chutes já feitos

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

string palavraSecreta = "MELANCIA";
vector<char> chutes;

bool letraExiste(char chute);
bool jaChutouLetra(char letra);
void mostraJutesFeitos();

int main() {
    setlocale(LC_ALL, ""); // ativa o uso de acentos

    char chute = ' ';
    bool acertou = false, enforcou = false;

    cout << "*********************************\n";
    cout << "***BEM-VINDO AO JOGO DA FORCA!***\n";
    cout << "*********************************\n";


    do {

        mostraJutesFeitos();

        // mostra a palavra com letras acertadas ou "_"
        for (char letra : palavraSecreta) {
            if (jaChutouLetra(letra)) {
                cout << letra << " ";
            }
            else {
                cout << "_ ";
            }
        }

        cout << "\nInforme uma letra, sempre use letras maiúsculas: ";
        cin >> chute;
        cout << "\n";

        chutes.push_back(chute); // adiciona o chute ao histórico

        if (letraExiste(chute)) {
            cout << "Você acertou! Seu chute está na palavra.\n";
        }
        else {
            cout << "Você errou! Seu chute não está na palavra.\n";
        }

        // condição de vitória
        acertou = true;
        for (char letra : palavraSecreta) {
            if (!jaChutouLetra(letra)) {
                acertou = false;
                break;
            }
        }

    } while (!acertou && !enforcou);

    if (acertou) {
        cout << "Parabéns! Você acertou a palavra secreta: " << palavraSecreta << "\n";
    }
}

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

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

void mostraJutesFeitos() {
    cout << "ESSES FORAM OS CHUTES JÁ FEITOS: ";
    for (char letra : chutes) {
        if (letra == chutes) {
            cout << letra;
        }
    }
}

Na função, void mostraJutesFeitos(), acusa um erro no operador ==. O que estou fazendo de errado?

2 respostas
solução!

Olá, Pedro. Tudo bem?

Obrigado por compartilhar seu código aqui com a gente.

Notei que na sua função void mostraJutesFeitos(), há um problema no trecho: if (letra == chutes). Isso ocorre porque você está comparando um único caractere (letra) com o vetor inteiro (chutes). O correto seria apenas iterar pelo vetor chutes e exibir os elementos diretamente, sem essa comparação.

Você pode ajustar sua função desta forma:


void mostraJutesFeitos() {
    cout << "ESSES FORAM OS CHUTES JÁ FEITOS: ";
    for (char letra : chutes) {
        cout << letra << " "; // Exibe cada letra chutada separada por um espaço
    }
    cout << "\n";
}

Esse código percorre o vetor chutes, imprime cada letra chutada, e evita a comparação desnecessária que causava o erro. Isso corrige a lógica e melhora a clareza da sua função.

Conte com o apoio do Fórum. Abraços e bons estudos!

Entendi, muito obrigado!