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

o erro é continuo

quando eu erro a letra apenas uma vez ele continua aumentando a variavel erros mesmo asertando em seguida

#include <stdio.h>
#include <string.h>
#include <locale.h>
int chutesDados = 0;
char chutes[26];
char palavraSecreta[26];

void abertura() {
    printf("/****************/\n");
    printf("/ Jogo de Forca */\n");
    printf("/****************/\n\n");
}

void chuta() {
    char chute;
    scanf(" %c", &chute);

    chutes[(chutesDados)] = chute;
    (chutesDados)++;
}

int jachutou(char letra) {
    int achou = 0;
    for (int j = 0; j < chutesDados; j++) {
        if(chutes[j] == letra) {
            achou = 1;
            break;
        }
    }
    return achou;
}

void imprimirForca() {
    for (int i = 0; i < strlen(palavraSecreta); i++) {

        int achou = jachutou(palavraSecreta[i]);
        //imprime a letra ou _
        if (achou) {
            printf("%c", palavraSecreta[i]);
        } else {
            printf ("_ ");
        }
    }
    printf("\n");
}

void escolhepalavra() {
    sprintf(palavraSecreta, "MELANCIA");
}

int enforcou() {
    int erros = 0;
    for (int i = 0; i < chutesDados; i++) {
        printf("%d", erros);
        int existe = 0;
        for (int j = 0; j < strlen(palavraSecreta); j++) {
            if (chutes[i] == palavraSecreta[i]) {
                existe = 1;
                break;
            }
        }
        if (!existe) {
        erros++;
        }
        }
    
    return erros >= 5;

}

int ganhou() {
for (int i = 0; i < strlen(palavraSecreta); i++) {
    if (!jachutou(palavraSecreta[i])) {
    return 0;
    }
}
return 1;
}
int main() {
    setlocale (LC_ALL, "portuguese");
    int acertou = 0;

    escolhepalavra();
    abertura();

    do
    {
    imprimirForca();
    chuta();

    } while (!ganhou() && !enforcou());
    
}
1 resposta
solução!

Oi, Alexandre! Tudo bem?

O problema está na função enforcou(), pois estamos verificando se a letra chutada está na palavra secreta, mas a comparação if (chutes[i] == palavraSecreta[i]) está comparando a letra chutada com a posição correspondente na palavra secreta, em vez de verificar se a letra chutada existe em qualquer posição da palavra secreta.

Dessa forma, devemos alterar esse trecho de código para verificar se a letra chutada está presente em qualquer posição da palavra secreta, deixando a nossa função da seguinte maneira:

int enforcou() {
    int erros = 0;
    for (int i = 0; i < chutesDados; i++) {
        int existe = 0;
        for (int j = 0; j < strlen(palavraSecreta); j++) {
            if (chutes[i] == palavraSecreta[j]) {  // Corrigido para palavraSecreta[j]
                existe = 1;
                break;
            }
        }
        if (!existe) {
            erros++;
        }
    }
    return erros >= 5;
}

Com essa correção, a função enforcou() agora verifica corretamente se a letra chutada existe em qualquer posição da palavra secreta, e a variável erros será incrementada apenas quando a letra chutada não estiver presente na palavra secreta.

Espero ter ajudado!

Um forte abraço e bons estudos!