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.
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();
}
}
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);
El problema es que es un trabajo que tengo que hacerlo con structuras y archivos sin usar librerias para listas
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
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();
}
}