Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro na função

Por qual motivo retorna 8x você acertou? E qual a diferença de size para length?

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

bool letraExiste(char chute);

string palavraSecreta = "MELANCIA";

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

    do {
        cout << "Informe uma letra, sempre use letras maiúsculas: ";
        cin >> chute;
        cout << "\n";
        for (int i = 0; i < 8; i++)
        {
            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;
}
1 resposta
solução!

Bom dia, Pedro! Tudo joia?

O motivo pelo qual a mensagem "Você acertou! Seu chute está na palavra" é exibida 8 vezes é porque o laço for dentro do do-while está configurado para executar 8 vezes, independentemente do resultado da função letraExiste. Cada vez que o laço for é executado, ele verifica se a letra existe e imprime a mensagem correspondente. Como o laço for sempre executa 8 vezes, a mensagem será impressa 8 vezes.

Para corrigir isso, você deve mover a verificação da função letraExiste para fora do laço for, assim:

do {
    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);

Dessa forma, a função letraExiste será chamada apenas uma vez por chute, e a mensagem será impressa apenas uma vez.

Sobre a diferença entre size() e length(), no contexto de std::string em C++, ambas as funções retornam o número de caracteres na string, ou seja, o tamanho da string. Elas são funcionalmente equivalentes e, na prática, você pode usar qualquer uma delas. A escolha entre size() e length() é mais uma questão de preferência pessoal ou de estilo de código.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.