Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Na hora de abrir o arquivo o programa da erro é como se o arquivo.txt estivesse vazio

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

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

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;
}

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 achou = 0;
    for(int j = 0; j < chutesdados; j++) {
        if(chutes[j] == letra) {
            achou = 1;
            break;
        }
    }

    return achou;
}

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

    return 1;
}

void desenhaforca() {

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

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

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

    }
    printf("\n");

}

void escolhepalavra() {
    FILE* f;
    f = fopen("C:\\Users\\João Pedro\\Documents\\projeto de jogo C\\palavras.txt", "r");

    if (f == NULL) {
        printf("Erro ao abrir o arquivo palavras.txt.\n");
        exit(1);
    }

    int qtdepalavras;
    fscanf(f, "%d", &qtdepalavras);
    printf("Quantidade de palavras: %d\n", qtdepalavras);

    srand(time(0));
    int randomico = rand() % qtdepalavras;
    printf("Índice aleatório: %d\n", randomico);

    rewind(f);

    char buffer[100];
    fgets(buffer, sizeof(buffer), f);
    printf("Linha de cabeçalho: %s\n", buffer);

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

    printf("Palavra escolhida: %s\n", palavrasecreta);

    fclose(f);
}
int main() {

    abertura();
    escolhepalavra();

    do {

        desenhaforca();
        chuta();

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

}

o codigo é esse, fiz algumas alterações com IA nele mas mesmo com as alterações o programa retorna ''F'' como ''NULL'' e exibe a mensagem de Erro ao abrir o arquivo palavras.txt

1 resposta
solução!

Oi João! Tudo bem?

Imagino que você esteja tentando executar o programa no VSCode na interface visual, né?

Testei seu código aqui dessa forma e vi que ele tava criando uma pasta output pra colocar o executável. O problema é que o arquivo palavras.txt fica em outra pasta, "acima" dessa. Provavelmente você passou o caminho completo (C:\Users\João Pedro\Documents\projeto de jogo C\palavras.txt) mas o compilador não conseguiu encontrar.

Uma forma mais fácil de resolver é passar o caminho "../palavras.txt" na função de abrir o arquivo. Dessa forma, ele vai procurar em uma pasta acima da output. Você também pode compilar e executar o programa pelo terminal, caso não queira modificar o arquivo. Aqui pra mim das duas formas funcionou.

Espero ter ajudado! Abraços e bons estudos!