Pasar datos de un archivo binario a una lista dinamica

Iniciado por ezar147, 8 Junio 2017, 20:08 PM

0 Miembros y 1 Visitante están viendo este tema.

ezar147

Tengo un archivo binario y quiero pasar los datos del archivo y registrarlos en una lista dinámica, pero al momento de hacerlo se me crean dos elementos en la lista aparte de los que están en el archivo. Quien me podría ayudar?

este es el código.
Código (cpp) [Seleccionar]


Clientes *registrar_cliente(){
Clientes *cliente = new Clientes; //se crea el un nuevo cliente.

if(P_inicio_cliente == NULL){ //en caso que no exista ningun elemento en la lista.

P_fin_cliente = cliente;
P_inicio_cliente = cliente;
cliente->P_ant = NULL;
cliente->P_sig = NULL;
}

else{ //si ya existen elementos en la lista.

cliente->P_ant = P_fin_cliente;
P_fin_cliente->P_sig = cliente;
cliente->P_sig = NULL;
P_fin_cliente = cliente;
}
return cliente;
}

int tomar_datos(){
ifstream clientesIn("clientes.dat",ios::in|ios::binary);
if(!clientesIn){
return -1;
}
else{
Clientes aux; //para tomar los datos del archivo y luego enviarlos a la lista
clientesIn.read((char*)&aux, sizeof(Clientes));
while(!clientesIn.eof()){
*registrar_cliente() = aux;
clientesIn.read((char*)&aux, sizeof(Clientes));
}
clientesIn.close();
}
}




MAFUS

En C++ existen ya las listas. No hace falta que hagas una desde cero.
*registrar_cliente() = aux; es un código muy extraño, deberías hacerlo más intuitivo. Por ejemplo algo así:
registrar_cliente(aux);
// o
misClientes.registrar(aux);

ezar147

El problema es que es un trabajo que tengo que hacerlo con structuras y archivos sin usar librerias para listas

ezar147

ya me di cuenta de mi error. Resulta que cuando guardo la información en el archivo también se guardan los datos del los punteros y estos se pasan al nuevo elemento creado. la solución es sencilla pero tuve que pensarlo bien para darme cuenta.

aquí les dejo el condigo con la solución
Código (cpp) [Seleccionar]

int tomar_datos(){
ifstream clientesIn("clientes.dat",ios::in|ios::binary);
if(!clientesIn){
return -1;
}
else{
Clientes aux; //para tomar los datos del archivo y luego enviarlos a la lista
clientesIn.read((char*)&aux, sizeof(Clientes));
while(!clientesIn.eof()){
                       aux.P_sig = NULL;
                       aux.P_ant = P_fin_cliente;
*registrar_cliente() = aux;
clientesIn.read((char*)&aux, sizeof(Clientes));
}
clientesIn.close();
}
}