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

Erro depois da função "acertou"

O código estava compilando normalmente. Depois de incluir a função "acertou", o jogo passou a encerrar quando eu entro a letra "M", sendo a primeira posição do vetor. O mesmo não ocorre com as outras letras, apenas com a primeira letra da palavra. Não consegui entender o motivo, então resolvi perguntar aqui...

#include <stdio.h>
#include <string.h>

char palavrasecreta[20];
char chutes[26];
int chutesdados = 0;

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

void chuta() {
    char chute;
    printf("Qual letra? ");
    scanf(" %c", &chute);

    chutes[chutesdados] = chute;
    chutesdados++;
}

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

    return achou;
}

void desenhaforca() {

    printf("Voce ja deu %d chutes\n", chutesdados);
    int i;
    for(i = 0; i < strlen(palavrasecreta); i++) {

        if(jachutou(palavrasecreta[i])) {
            printf("%c ", palavrasecreta[i]);
        } else {
            printf("_ ");
        }

    }
    printf("\n");

}

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

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

int enforcou(){
    int i, erros = 0;
    for(i = 0; i < chutesdados; i++){
        int j, existe = 0;

        for(j = 0; j < strlen(palavrasecreta); j++){
            if(chutes[i] == palavrasecreta[j]){
                existe = 1;
                break;
            }
        }

        if(!existe) erros++;
    }

    return erros >= 5;
}

int main() {

    abertura();
    escolhepalavra();

    do {

        desenhaforca();
        chuta();

    } while (!acertou() && !enforcou());

}
2 respostas

Olá, Leilah, tudo bem ?

Inspecionei o código e verifiquei que uma condição ( if ) da função acertou() estava com uma negativa que causava esse erro, por você citado;

Após a remoção e teste, o erro que você relatou parou de acontecer, segue a modificação;

Código do seu projeto:

if(!jachutou(palavrasecreta[i])){
            return 0;
}

Código modificado:

if(jachutou(palavrasecreta[i])){
            return 0;
}

Espero ter ajudado !

Olá, Lucas, bom dia!

Obrigada pela resposta. Olhei no código do instrutor (Aula 6 - Atividade 8) e está da mesma forma, com a negativa na frente. Por isso estranhei quando tentei rodar o código, pois o meu estava igual ao do instrutor, e no vídeo o dele rodava, e o meu não.

O código, conforme ele disponibilizou, é o mesmo que coloquei, conforme abaixo:

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

    return 1;
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software