Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Bug] Jogo finaliza após duas tentativas

Olá, meu jogo está finalizando após duas tentativas. Alguém poderia me ajudar a entender oq ue pode ter causado?

#include <stdio.h>
#include <locale.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include "forca.h"

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

void abertura() {
    setlocale(LC_ALL, "Portguese");
    printf("*********************\n");
    printf("*  Jogo de forca    *\n");
    printf("*********************\n\n");

}

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

    chutes[chutesdados] = chute;
    chutesdados++;

}

void desenhaforca(){
    for(unsigned int i = 0; i < strlen(palavrasecreta); i++) {

       int achou = jachutou(palavrasecreta[i]);

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

    }
    printf("\n");
}

void escolhepalavra(){
    FILE* f;

    f = fopen("../palavras.txt", "r");
    if(f == 0) {
        printf("Desculpe, banco de dados não disponível.\n\n");
        exit(1);
    }

    int qtdpalavras;
    fscanf(f, "%d", &qtdpalavras);

    srand(time(0));
    int randomico = rand() % qtdpalavras;

    for(int i = 0; i <= randomico; i++){
        fscanf(f, "%s", palavrasecreta);
    }

    fclose(f);
}

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

int enforcou() {
    int erros = 0;

    for(int i = 0; i < chutesdados; i++) {

        int existe = 0;

        for(unsigned int j = 0; j < strlen(palavrasecreta); j++) {
            if(chutes[i] == palavrasecreta[j]) {

                existe = 1;
                break;
            }
        }

        if(!existe) erros++;
    }

    return erros >= 5;
}

int jachutou(char letra) {
    int achou =0;

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

int main() {

    abertura();
    escolhepalavra();

    do {

        desenhaforca();
        chuta();

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

}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas
solução!

Provavelmente a varíavel de chutesdados tá sendo incrementada de forma errada dentro do loop! Você pode tentar:

for(int j = 0; j < chutesdados; j++){

oi Luan, muito obrigada. Deu certo agora