2
respostas

[Dúvida] Função

Olá, boa tarde! Tudo bem? Eu criei essa função, mas ela não está funcionando corretamente, pode me ajudar?

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

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

string palavraSecreta = "MELANCIA";
char chutes[8];

int main()
{
    setlocale(LC_ALL, "");  // Ativa o uso de acentos
    
    char chute = ' ';
    bool acertou = false, enforcou = false;

    for (int i = 0; i < palavraSecreta.size(); i++) {
        chutes[i] = 0;
    }

    do {
        for (char letra : palavraSecreta) {
            if (jaChutouLetra(letra)) {
                cout << letra << " ";
            }
            else {
                cout << "_ ";
            }
           
        }

        cout << "Informe uma letra, sempre use letras maiúsculas: ";
        cin >> chute;
        cout << "\n";
       
        if (letraExiste(chute)) {
           // cout << "Você acertou! Seu chute está na palavra\n";

        }
        else {
           // cout << "Você errou! Seu chute não está na palavra\n";
        }
       
    } while (!acertou && !enforcou);

}

bool letraExiste(char chute) {
    /*for (int i = 0; i < palavraSecreta.size(); i++)
    {
        if (chute == palavraSecreta[i]) {
            return true;
        }
    }
    return false;*/

    for (char letra : palavraSecreta) {
        if (chute == letra) {
            for (int i = 0; i < palavraSecreta.size(); i++) {
                if (chutes[i] != 0) {
                    chutes[i] = chute;
                }
            }
            return true;
        }
    }
    return false;
}

bool jaChutouLetra(char letra) {
    for (int i = 0; i < palavraSecreta.size(); i++) {
        if (palavraSecreta[i] == chutes[i]) {
            cout << "true";
            return true;
        }
        else {
            cout << "FALSE";
            return false;
        }
    }
}
2 respostas

Oii, Pedro.

A função tem um problema principal relacionado ao uso de variáveis e lógica dentro das funções letraExiste e jaChutouLetra. Vou apontar as melhorias e corrigir o código:

  1. Uso do array chutes: O array chutes deveria armazenar os caracteres chutados, mas a lógica atual sobrescreve os valores ou acessa índices de forma indevida.

Ajuste seu código para:

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

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

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

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

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

    do {
        // 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;
}

Alterações feitas:

  1. Substituí o array fixo char chutes[8] por um vector<char> para facilitar a manipulação dos chutes.
  2. Ajustei a função jaChutouLetra para verificar apenas os chutes já feitos, sem comparar diretamente com a palavra secreta.
  3. Implementei a condição de vitória baseada no acerto de todas as letras.

Teste agora e veja como funciona.

print do console

Um abraço e bons estudos.

Boa tarde! vector. O que é essa expressão? chutes.push_back(chute). Envia o chute para a última possição disponível no array?