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

Aparentemente fopen não acha o arquivo

Olá estou com um problema aqui, ao executar o programa após a ter implementado a leitura do arquivo na função escolhepalavra estava me dando um erro de "Segmentation fault 11", dei uma lida na internet e parece que era algum tipo de memory access violation, ok... coloquei um if(f == NULL) para ver se era problema com o arquivo .txt e realmente f está vindo null pra mim, o que pode ser? todos os arquivos (forca.c, forca.h, palavras.txt) estão em uma pasta chamada forca, segue me código até o momento.

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

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

void abertura() {

    printf("*************************************/ \n");
    printf("*           Jogo de forca            */ \n");
    printf("*************************************/ \n\n");

}

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

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

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 escolhepalavra() {
    FILE* f;
    f = fopen("palavras.txt", "r");

    if(f == NULL) { 
        printf("Banco de dados de palavras não disponivel!\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 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 >= 5;
}

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

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

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();

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

Estou fazendo algo errado? Obrigado desde já.

2 respostas

Update

mudei o if para:

if(f == NULL) { 
        // printf("Banco de dados de palavras não disponivel!\n");
        perror ("Error");
        exit(EXIT_FAILURE);
    }

e meu console retorna:

Error: No such file or directory
solução!

Consegui resolver passando o absolute path do arquivo.