Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

A função para verificar se acertou a palavra secreta não retorna verdadeiro

A função para verificar se acertou a palavra secreta não retorna 1 (verdadeiro), o que faz com que o jogo continue rodando mesmo depois de exibir todas as letras.

int ganhou() {

    for (int i=0; i<=strlen(palavra); i++) {
        if (!jachutou(palavra[i])) {
            return 0;
        }
    }
    return 1;
}

Alguém tem uma ideia? Obrigado.

1 resposta

Olá Mubarak.

O que está gerando o erro é o operador <= que está utilizando no seu for:

int ganhou() {

    for (int i=0; i<=strlen(palavra); i++) {
        if (!jachutou(palavra[i])) {
            return 0;
        }
    }
    return 1;
}

Do jeito que está ele entra em uma posição de memoria invalida do vetor palavra, por exemplo, se sua palavra for MAÇA, o strlen(palavra) vai ser 5 e a posição 5 não existe já que o vetor começa no 0 e se você tentar acessar essa posição vai encontrar lixo de memoria e esse lixo de memoria quando for enviado para a sua função jachutou não vai ser encontrado entrando no seu if e indo para o return 0.

int ganhou() {

    for (int i=0; i<strlen(palavra); i++) {
        if (!jachutou(palavra[i])) {
            return 0;
        }
    }
    return 1;
}

Para resolver basta trocar o operador ( <= ) para o operador ( < ) e dessa maneira percorrer seu vetor de maneira correta.

Bons Estudos.