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

Randomização das palavras não funciona

Quando o jogo é compilado a única palavra selecionada é palavra MANGA (a palavra da última linha de palavras.txt). Compilei e joguei o jogo várias vezes mas nenhuma outra palavra do arquivo palavras.txt é selecionada.

void escolhePalavra(){
    FILE * f;

    f = fopen("palavras.txt", "r");
    if(f==0){
        printf("ERRO\n");
        exit(1);
    }

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

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

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

    fclose(f);

}

Segue o que está no arquivo palavras.txt:

4
MELANCIA
MELAO
MORANGO
MANGA
2 respostas
solução!

Olá, Pedro! Tudo bem?

Pelo trecho que você colocou, não parece ter erro.

Poderia compartilhar comigo aqui o seu código completo, para eu poder de ajudar melhor?

Aguardo retorno.

Claro, aqui está:

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

void abertura();
void chuta();
void desenhaforca();
void escolhePalavra();
int acertou();
int enforcou();
int jachutou(char letra);
void adicionaPalavra();

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("Chute uma letra?\n");
    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("Numero de chutesdados: %d\n", chutesdados);

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

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

    printf("\n");
}

void adicionaPalavra(){

    char opcao;
    printf("\nAdicionar nova palavra ao jogo?S/N\n");
    scanf(" %c", &opcao);

    if(opcao == 'S'){

        char palavraNova[20];
        printf("Qual a palavra nova?\n");
        scanf("%s", palavraNova);

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

        if(f == 0){
            printf("ERRO\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", palavraNova);

        fclose(f);

    }
}

void escolhePalavra(){
    FILE * f;

    f = fopen("palavras.txt", "r");
    if(f==0){
        printf("ERRO\n");
        exit(1);
    }

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

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

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

    fclose(f);
}

int acertou(){

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

        if(!jachutou(palavraSecreta[i])){
            return 0;
        }
    }
    printf("\nVoce acertou\n");

    return 1;
}

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

    if(erros >= 5){
        printf("\nEnforcou\nVoce Perdeu");
    }

    return erros >= 5;
}

int main(){

    escolhePalavra();
    abertura();

    do {

        desenhaforca();
        chuta();

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

    adicionaPalavra();

    return 0;
}