1
resposta

Função adicionaPalavra

O jogo inteiro funciona, Já copiei e colei a função adicionaPalavra, o código roda normalmente. Quando acaba o jogo, pergunta se eu quero adicionar, eu digito S, escrevo a palavra, mas não adiciona no arquivo. Não sei o que está acontecendo, já li e reli tudo e já assisti aos vídeos novamente.

Segue abaixo o meu código...

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

char palavraSecreta[20];
char chutes[26];
int chutesDados = 0;

void abertura() {

    printf("*********************\n");
    printf("*   JOGO DE FORCA   *\n");
    printf("*********************\n\n");
}

void chuta() {

    char chute;
    printf("Escolha uma 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 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 adicionaPalavra() {
    char quer;

    printf("Você deseja adicionar uma nova palavra no jogo (S/N)?");
    scanf(" %c", &quer);

    if(quer == 'S') {

        char novaPalavra[20];

        printf("Digite a nova palavra (EM LETRAS MAIÚSCULAS): ");
        scanf("%s", novaPalavra);

        FILE* f;

        f = fopen("palavras.txt", "r+");

        if(f == 0) {

            printf("Banco de dados de palavras não está disponível...\n\n");
            exit(1);
        }

        int qtd;
        fscanf(f, "%d", &qtd);
        qtd++;

        fseek(f, 0, SEEK_SET);
        fprintf(f, "%d", qtd);

        fseek(f, 0, SEEK_END);
        fprintf(f, "\n%s", novaPalavra);

        fclose(f);

    }

}

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

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

        if(!jaChutou(palavraSecreta[i])) {

            return 0;
        }
    }

    return 1;
}

int main() {

    setlocale(LC_ALL, "portuguese-brazilian");

    abertura();

    escolhePalavra();

    do {

        desenhaForca();

        chuta();

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

    adicionaPalavra();
}
1 resposta

Olá Ighor,

rodei o seu código aqui e tudo funcionou corretamente.

rulojuka@lyra:~$ cat palavras.txt 
1
PALAVRAJAEXISTENTE
rulojuka@lyra:~$ gcc aluno.c -o teste
rulojuka@lyra:~$ ./teste
*********************
*   JOGO DE FORCA   *
*********************

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
Escolha uma letra: P
P _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
Escolha uma letra: A
P A _ A _ _ A _ A _ _ _ _ _ _ _ _ _ 
Escolha uma letra: L
P A L A _ _ A _ A _ _ _ _ _ _ _ _ _ 
Escolha uma letra: V
P A L A V _ A _ A _ _ _ _ _ _ _ _ _ 
Escolha uma letra: R
P A L A V R A _ A _ _ _ _ _ _ _ _ _ 
Escolha uma letra: J
P A L A V R A J A _ _ _ _ _ _ _ _ _ 
Escolha uma letra: E
P A L A V R A J A E _ _ _ _ E _ _ E 
Escolha uma letra: X
P A L A V R A J A E X _ _ _ E _ _ E 
Escolha uma letra: I
P A L A V R A J A E X I _ _ E _ _ E 
Escolha uma letra: S
P A L A V R A J A E X I S _ E _ _ E 
Escolha uma letra: T
P A L A V R A J A E X I S T E _ T E 
Escolha uma letra: N
Você deseja adicionar uma nova palavra no jogo (S/N)?S
Digite a nova palavra (EM LETRAS MAIÚSCULAS): OUTRAPALAVRA
rulojuka@lyra:~$ cat palavras.txt 
2
PALAVRAJAEXISTENTE

OUTRAPALAVRArulojuka@lyra:~$

Você pode me passar os passos no prompt ou no terminal, como eu fiz acima? Creio que você esteja verificando um outro arquivo palavras.txt ou que o seu editor de texto não esteja sendo atualizado.

Abraços, Alessandro

P.S.: O espaço entre as palavras foi causado pois eu inicializei o arquivo palavras.txt com uma quebra de linha, não é um erro no código.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software