1
I can’t use the fscanf
in a structure, I have already allotted the structures.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct Cliente
{
int numero;
char *nome;
};
struct Filme
{
int numero;
char * nome;
};
struct Data
{
int dia;
int mes;
int ano;
};
struct Emprestimo
{
int numero;
int ativo;
Cliente *cliente;
Filme *filme;
Data *emprestimo;
Data *devolucao;
};
void verifica_erro(FILE *arquivo) //verifica se deu erro ao abrir o arquivo
{
if(arquivo==NULL)
{
printf("Erro ao abrir o arquivo!");
exit(0);
}
}
void carrega_empre(Emprestimo *video) //carrega na memoria os dados do cliente
{
FILE *arquivo;
arquivo=fopen("emprestimos.txt","rt");
verifica_erro(arquivo);
int cont=0;
while(!feof(arquivo))
{
fscanf(arquivo,"%d %d %d" ,&video[cont].numero,&video[cont].cliente->numero,&video[cont].filme->numero);
fscanf(arquivo,"%d %d %d %d " ,&video[cont].emprestimo->dia,&video[cont].emprestimo->mes,&video[cont].emprestimo->ano,&video[cont].ativo);
fscanf(arquivo,"%d %d %d",&video[cont].devolucao->dia,&video[cont].devolucao->mes,&video[cont].devolucao->ano);
cont++;
cont++;
}
fclose(arquivo);
}
int conta_registros(char *caminho) //conta quatos registros tem no txt para alocar na strutura
{
FILE *arquivo;
char caracter;
int linhas=0;
arquivo=fopen(caminho,"rt");
while((caracter = fgetc(arquivo)) != EOF)
{
if(caracter == '\n') //cada linha eh um registro
{
linhas++;
}
}
fclose(arquivo);
return linhas;
}
int main()
{
int regE;
Emprestimo *video;
regE=conta_registros("emprestimos.txt");
video=(Emprestimo*)malloc(regE+20*sizeof(Emprestimo));
carrega_empre(video);
printf("acabo\n");
scanf("%*c");
return 0;
}
Post a template/example of the file you are trying to read.
– Cahe