2
respostas

apos adicionar o arquivo palavras.txt o "achou" parou de funcionar

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

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

void abertura() { printf("****************************************\n"); printf(" JOGO DA FORCA *\n"); printf("*****************************************\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 () {

 printf("Voce já deu %d chutes\n", chutesdados);

for(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("Banco de dados de palavras não disponível\n\n");
    exit(1);
}

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

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

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

fclose(f);

}

int enforcou () {

int chances=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) {
        chances++;
    }
} return chances >=5;

}

int acertou() {

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

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

}

int main () {

escolhepalavra();

abertura();do { desenhaforca ();

chuta(&chutesdados);
printf ("%s \n", palavrasecreta);

}

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

}

2 respostas

depois de quase ficar maluco, copiei a funcao "jachutou" de um codigo aqui do forum e funcionou, comparei e posso estar maluco ou cansado mas a unica diferente foi a espacamento entre os caracteres

FORUM

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

return achou;

}

ORIGINAL

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

            achou=1;
            break;
}

}  return achou;
}

o fato de eu estar maluco ou nao ter percebido algo eh possivel visto o tempo que apanhei aqui kkkkk

mas alguem pode informar, o espaco realmente foi a causa?

Olá, Marcelo!

Pelo que entendi, você adicionou o arquivo "palavras.txt" ao seu programa e, após essa adição, a função "achou" parou de funcionar. Vou te ajudar a resolver esse problema.

O problema está na função "escolhepalavra", onde você lê as palavras do arquivo. Após ler a quantidade de palavras, você está lendo cada palavra uma por uma e salvando na variável "palavrasecreta". Porém, a cada iteração do loop, você está sobrescrevendo o valor anterior de "palavrasecreta", então no final do loop, a variável só terá a última palavra lida.

Para resolver isso, você pode criar um array de strings para armazenar todas as palavras lidas do arquivo. Assim, você poderá escolher uma palavra aleatória desse array e salvar em "palavrasecreta".

Aqui está uma possível solução:

void escolhepalavra() {
    FILE* f;

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

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

    char palavras[qtddepalavras][20]; // Array de strings para armazenar as palavras

    for(int i = 0; i < qtddepalavras; i++) {
        fscanf(f, "%s", palavras[i]);
    }

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

    strcpy(palavrasecreta, palavras[randomico]); // Copia a palavra aleatória para palavrasecreta

    fclose(f);
}

Nessa solução, criamos um array de strings chamado "palavras" com o tamanho exato para armazenar todas as palavras lidas do arquivo. Em seguida, no loop, lemos cada palavra do arquivo e salvamos no array "palavras". Por fim, escolhemos uma palavra aleatória desse array e copiamos para "palavrasecreta" usando a função "strcpy".

Espero que essa solução resolva o problema. Se tiver mais alguma dúvida, é só me dizer! Espero ter ajudado e bons estudos!