joanacs Posted June 14, 2018 at 01:40 PM Report #610972 Posted June 14, 2018 at 01:40 PM (edited) Boa tarde! Estou a desenvolver um programa em C onde tenho de fazer a listagem de todos os clientes existentes numa lista ligada. Inicialmente li todos os clientes de um ficheiro de texto para a lista ligada só que quando vou a imprimir na consola, o programa só estou a imprimir a última data guardada no ficheiro. Se me puderem ajudar, agradecia! - Ficheiro .txt: 123456789 0 Paulo Silva 555666777 2 Marta Nunes Cabral 4 1 12 12 2017 17 12 2017 5 0 20 04 2018 123123123 3 Maria Pimentel 5 2 01 10 2017 10 10 2017 5 1 13 01 2018 15 01 2018 4 0 17 04 2018 111111111 1 Raquel Marques 3 0 26 05 2018 28 05 2018 - Output: CLIENTES: 123456789 0 Paulo Silva 555666777 2 Marta Nunes Cabral 5 0 20/4/2018 17/12/2017 5 0 20/4/2018 17/12/2017 123123123 3 Maria Pimentel 4 0 17/4/2018 15/1/2018 4 0 17/4/2018 15/1/2018 4 0 17/4/2018 15/1/2018 111111111 1 Raquel Marques 3 0 26/25/2018 15/1/2018 struct data_inicio {int dia, mes, ano;}; struct data_entrega {int dia, mes, ano;}; typedef struct aluguer alu, *p_aluguer; struct aluguer { int idGuitarra; int estado_aluguer; int n_alugueres; struct data_inicio d_i; struct data_entrega d_e; p_aluguer prox; }; typedef struct cliente cli, *p_cliente; struct cliente{ int nif; char nomeCliente[ST_TAM]; struct aluguer a; p_cliente prox; }; /*- CRIAÇÃO DA LISTA LIGADA CLIENTES ----------------------------------------------*/ p_cliente criaLista(char *nomefich){ p_cliente lista = NULL, novo, aux = lista; cli c; FILE *f; f = fopen(nomefich,"rt"); if(f == NULL){ printf("Erro no acesso ao ficheiro.\n"); return NULL; } c.prox = NULL; while(fscanf(f, "%d %d %49[^\n]", &c.nif , &c.a.n_alugueres, c.nomeCliente) == 3){ for(int i = 0; i < c.a.n_alugueres; i++){ fscanf(f, "%d %d %d %d %d", &c.a.idGuitarra, &c.a.estado_aluguer, &c.a.d_i.dia, &c.a.d_i.mes, &c.a.d_i.ano); if(fgetc(f) != '\n'){ fscanf(f, "%d %d %d\n", &c.a.d_e.dia, &c.a.d_e.mes, &c.a.d_e.ano); } } novo = malloc(sizeof(cli)); if(novo == NULL){ printf("Erro na alocaçao de memoria.\n"); fclose(f); return lista; } *novo = c; if(!lista) lista=novo; else aux->prox=novo; aux=novo; } return lista; } /*- LISTAGEM DE TODOS OS CLIENTES ATIVOS ------------------------------------------*/ void mostraClientes(p_cliente c){ printf("\n\nCLIENTES:\n\n"); while(c != NULL){ printf("%d %d %s\n", c->nif, c->a.n_alugueres, c->nomeCliente); for(int i = 0; i < c->a.n_alugueres; i++){ printf("%d %d %d/%d/%d ", c->a.idGuitarra, c->a.estado_aluguer, c->a.d_i.dia, c->a.d_i.mes, c->a.d_i.ano); printf("%d/%d/%d\n", c->a.d_e.dia, c->a.d_e.mes, c->a.d_e.ano); //c = c->prox; } c = c->prox; } } Edited June 14, 2018 at 01:46 PM by joanacs Adicionei o output
HappyHippyHippo Posted June 15, 2018 at 08:00 AM Report #610981 Posted June 15, 2018 at 08:00 AM na tua estrutura de cliente só tens "lugar" para guardar a informação de um aluger, sendo que da mesma forma, quando estás a ler ou a escrever, estás sempre a escrever ou a gravar na posição única. da mesma forma que tens uma lista de clientes, deverás ter uma lista de alugueres IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now