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.