Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

[Projeto] Solução para o desafio de fim de curso (Array)

Após alguns minutos pensando, foi fácil resolver, são apenas alterações simples:

forca.cpp, adicionamos a variável de contador de chutes, e passamos ela como parâmetro da função chuta

static int chutes_dados = 0;

[...]

Forca::chuta(chutes_errados, chutou, palavra_secreta, chutes_dados);

Já no chuta.hpp e chuta.cpp, alteramos apenas os parâmetros passados:

chuta.hpp e chuta.cpp

void Forca::chuta(std::array<char, 5>& chutes_errados, std::map<char, bool>& chutou, const std::string& palavra_secreta, int& chutes_dados) {

E por fim, no chuta.cpp modificamos como o array é acessado e os valores registrados:

void Forca::chuta(std::array<char, 5>& chutes_errados, std::map<char, bool>& chutou, const std::string& palavra_secreta, int& chutes_dados) {
    std::cout << "Seu chute: ";
    char chute;
    std::cin >> chute;

    chutou[chute] = true;

    if (Forca::letra_existe(chute, palavra_secreta)) {
        std::cout << "Você acertou! Seu chute está na palavra." << std::endl;
    }
    else {
        std::cout << "Você errou! Seu chute não está na palavra." << std::endl;
        chutes_errados[chutes_dados] = chute; // Aqui acessamos o array e preenchemos
        chutes_dados++; // Aqui aumentamos o contador em 1 para cada vez que um erro ocorreu
    }
    std::cout << std::endl;
}
1 resposta
solução!

Oi, Murilo! Tudo bem?

Que bom ver você compartilhando a sua solução para o desafio de fim de curso usando array e ainda destacando cada alteração feita nos arquivos.

A sua abordagem tá no caminho certo: manter um contador pra indicar a próxima posição livre do std::array é a maneira mais direta de registrar os chutes errados.

Um ponto importante nesse trecho é proteger o acesso ao array, porque std::array<char, 5> tem tamanho fixo e gravar em uma posição além do limite gera comportamento indefinido o programa pode até continuar rodando, mas com memória corrompida e resultados imprevisíveis. A dica aqui é validar o índice antes da escrita, comparando o contador com o tamanho do próprio array: if (chutes_dados < chutes_errados.size()) { ... }. Outra alternativa é trocar o [] pelo método .at(), que lança uma exceção quando o índice é inválido em vez de falhar silenciosamente. Vale considerar também renomear a variável para algo como chutes_errados_dados, deixando explícito que ela conta apenas os erros e não todos os chutes.

Pensando na continuidade do projeto, como você imagina exibir esses chutes errados na tela conforme a partida avança?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!