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

fscanf não retorna um inteiro do arquivo de texto.

Olá, eu acho que minha função está igualzinha a da aula:

void escolhepalavras(){    

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

    if(f == 0){
        printf("Erro");
        exit(1);
    }

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


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

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

    fclose(f);

}

Mas o código não retorna um inteiro quando chama fscanf(f, "%d", &quantidadepalavras);, como a variavel não está inicializada ela fica com o antigo valor da memoria daquele local:

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

    printf("Quantidade palavras: %d\n", quantidadepalavras);
>>> Quantidade palavras: 1977011392

E o numero aleatorio obviamente fica gigante e somente a ultima palavra do meu texto é escolhida todas as vezes.

Não sei se isso é um problema do windows, talves o CRLF no fim da linha (o professor usa um Mac nos videos então imaginei que talvez pudesse ser um motivo, mas não faço ideia e nem vejo como isso faça muito sentido já que a função fscanf deveria levar essas possibilidades em consideração). O meu arquivo de .txt está assim:

9
Melancia
LIMAO
morango
laranja
jabuticaba
acerola
tamarindo
tangerina
pimenta

Não sei como resolver, pesquisei online e não encontrei nada ainda. Vou tentar outra abordagem por enquanto, fazendo um loop pelo arquivo e contando as linhas.

Caso eu ache uma solução eu posto aqui, mas imagino que outras pessoas também já passaram por isso.

1 resposta
solução!

Provavelmente o problema era algo parecido com o que eu tinha falado, sobre as terminações das linhas (CRLF, CR).

Eu criei o arquivo no Visual Studio Code e estava dando o erro, eu copiei o texto, colei no Sublime (que tambem foi usado na aula) e salvei por cima do outro arquivo e funcionou! Deve ser alguma codificação diferente do arquivo salvo pelo VS Code.

Então caso mais alguém esteja passando por isso é só salvar o arquivo usando outro editor de texto, imagino que o próprio bloco de notas talvez sirva também.