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

[Bug] erro na hora de desenhar a forca

aqui esta o codigo da forca

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

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

void titulo(){

    printf("*************************\n");
    printf("**    jogo da 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 desenhaforca(){

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

        int achou = jachutou(palavrasecreta[i]);

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

}

void selecionapalavra(){

    FILE* f;
    
    f = fopen("forcapalavras.txt", "r");

    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 ganhou(){

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

        if (!jachutou(palavrasecreta[i])){

            return 0;
            break;

        }   

    }
    return 1;
}

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]){

                existe = 1;
                break;
            }

        }
        
        if(!existe) erros++;
    }
    return erros >= 6;

}

int main(){


    selecionapalavra();

    titulo();
    
    do{

        desenhaforca();
        
        chuta();
        

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

    if(ganhou()){

        printf("parabens voce ganhou\n");

    }
    else if(enforcou()){

        printf("voce perdeu tente novamente\n");

    }
}

aqui esta o arquivo com as palavras

4
uva
banana
abacaxi
melancia

e aqui o arquivo .h

void titulo();
void chuta();
int jachutou(char letra);
void desenhaforca();
void selecionapalavra();
int ganhou();
int enforcou();

por algum motivo a forca não funciona não aparece os _ _ _ e quando digito uma letra o codigo para e fala que ganhei

3 respostas

Olá, Kelvyn! Tudo bem com você? Espero que sim!

Testando o código que você compartilhou, não obtive o mesmo problema que você havia comentado, rodou normalmente como deveria. Com base nisso, o seu problema pode estar acontecendo por conta de algum problema no processo de compilação do projeto.

No mais, peço que tente compilar o projeto novamente e veja se o problema se mantêm. Caso, sim, compartilhe mais informações sobre o erro, um print pode ser de grande ajuda.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

o erro ainda está ocorrendo , ja desinstalei e reinstalei os programas, mas testei em um linux ele desenha a forca certinho, mas quando coloca a letra certa o código identifica que a letra não existe e marca um erro, mesmo que exista a letra na palavra, e no vscode de windowns, ele não desenha a forca e quando digita qualquer letra aparece na hora você ganhou.

vou fazer uma simulação do que ta acontecendo:

a palavra secreta é "melancia"


linux:

jogo da forca                                                              

. . . . . . . .                                    
m                                                                                  
. . . . . . . .                              
a
. . . . . . . .
l
. . . . . . . .
c
. . . . . . . .
e
. . . . . . . .
n
voce perdeu!

windowns:

jogo da forca

. . . . . . . .
a
voce ganhou!
solução!

consegui resolver, procurei se alguém teve o mesmo problema que eu descobri que era só colocar o arquivo .txt na pasta output que o vs code gera