1
resposta

Função adicionar nova palavra não funciona, o arquivo só abre para a função escolhepalavra que tem o fclose()

Alguém utilizando o VSCode sabe o que pode ter dado errado?

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

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

int main() {
    abertura();
    escolhepalavra();

    do {
        desenhoforca();
        chuta(chutes);
    } while (!ganhou() && !enforcou());
    adicionapalavra();
}


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 ganhou(){
    for (int i = 0; i < strlen(palavrasecreta); i++)
    {
        if(!jachutou(palavrasecreta[i])){
            return 0;
        }
    }
    return 1;
}

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

void desenhoforca(){
    printf("Chute de letra numero %d:\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;
    int qtdpalavras = 0;

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

    fscanf(f, "%d", &qtdpalavras);
    srand(time(0));
    int randomico = rand() % qtdpalavras;

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

    fclose(f);
}

void adicionapalavra(){
    char queradicionar;
    FILE* f;

    printf("Deseja adicionar nova palavra no banco de dado da forca (S/N)?");
    scanf(" %c", &queradicionar);

    if(queradicionar == 'S'){
        int qtdpalavras;
        char novapalavra[20];

        printf("\nDigite a nova palavra: ");
        scanf("%s", novapalavra);

        f = fopen("palavras.txt", "r+");
        if(f==0){
            printf("Arquivo/Banco de dados indisponível\n\n");
            exit(1);
        }

        fscanf(f, "%i", &qtdpalavras);
        qtdpalavras ++;

        fseek(f, 0, SEEK_SET);
        fprintf(f, "%i", qtdpalavras);

        fseek(f, 0, SEEK_END);
        fprintf(f, "\n%c", novapalavra);
        fclose(f);
    }
}
1 resposta
Removido a pedido do usuario.