Os pongo en situacion, tengo una lista enlazada de listas de vuelos, cada vuelo tiene el codigo del vuelo, el numero de pasajeros que tendrá el avión y un puntero que apuntara a otra lista para los pasajeros, donde estos tendran sus correspondientes campos. Asi tengo una lista con los datos de vuelo, y de cada vuelo una lista con pasajeros.
A la hora de insertar el vuelo, me lo hace bien, pero me inserta otros datos, fui subiendo de nivel, hasta que me di cuenta que el fallo está en el procedimiento del leer la estructura previa a la inserción, ya que siempre me da los mimos valores, pero al insertar me pierde el primer valor,inserta el segundo como primero y el segundo coge unos valores extraños, siempre el mismo 2009095316, eso me hace pensar que es algo sobre punteros, pero como cuando leo aun no llamo a nada, incluse probé mostrando los valores nada más leer los datos pero nada.
Aqui os dejo el codigo.
Código:
Tiene mucho codigo pero lo unico a mirar es el LeerVuelo./*---------------------------------------------------------------- | Autor: | | Fecha: Versi?n: 1.0 | |-----------------------------------------------------------------| | Descripci?n del Programa: | | | | ----------------------------------------------------------------*/ // Incluir E/S y Librer?as Standard #include <iostream> #include <cstdlib> #include <string> using namespace std; // Zona de Declaraci?n de Constantes const char ENTER='\n'; // Zona de Declaraci?n de Tipos struct TPasajero { string nombre; int unsigned edad; string dni; }; struct TNodoPasajero { TPasajero pasajero; TNodoPasajero *sig; }; typedef TNodoPasajero *TListaPasajero; struct TVuelo { string cod_vuelo; int unsigned asientos_lib; TNodoPasajero *p; }; struct TNodoVuelo { TVuelo vuelo;// TNodoVuelo *sig; }; typedef TNodoVuelo *TListaVuelo; typedef enum {NoError,ErrorMemoriaLlena,ErrorListaVacia,ErrorPasajerosVacios,ErrorElementoNoExiste,ErrorListaPVacia}TError; // Zona de Cabeceras de Procedimientos y Funciones char menu(); bool ConfirmaSalida(); TListaVuelo CrearListaVuelo(); TListaPasajero CrearListaPasajero(); void LeerVuelo(TVuelo &vuelo); void InsertarVuelo(TListaVuelo &l,TVuelo vuelo,TError &error); void MostrarTodos(TListaVuelo l,TError &error); //aux void MostrarVuelo(TListaVuelo l); void MostrarListaPasajeros(TListaPasajero lP); void MostrarPasajero(TPasajero lP); void EliminarVuelo(TListaVuelo &l,string cod,TError &error); void BorrarPasajeros(TListaPasajero &lP); void MostrarError(TError error); // Programa Principal int main() { // Zona de Declaraci?n de Variables del Programa principal char opcion; bool salir; string cod; TListaVuelo listaV; TVuelo vuelo; TError error; salir = false; listaV=CrearListaVuelo(); while(!salir) { opcion = menu(); cout << endl; switch(opcion) { case 'A': //LeerVuelo(vuelo); cout << "Introduzca codigo de vuelo: "; cin >> vuelo.cod_vuelo; cout << "Introduzca numero de asientos libres: "; cin >>vuelo.cod_vuelo; cin.ignore(); cout<<vuelo.cod_vuelo<<endl; cout << vuelo.asientos_lib<< endl; InsertarVuelo(listaV,vuelo,error); break; case 'B': cout << "Introduzca codigo del vuelo que desea borrar: " << endl; getline(cin,cod,ENTER); EliminarVuelo(listaV,cod,error); break; case 'C': break; case 'F': MostrarTodos(listaV,error); break; case 'X': salir = ConfirmaSalida(); break; } cout << endl; MostrarError(error); cout << endl << endl; system("Pause"); // Hacer una pausa system("cls"); // Borrar la Pantalla } cout << endl << endl; cout << "Nombre: ..." << endl; cout << "Grupo: 1? A (I.T.I. Sistemas)" << endl; cout << "M?quina: ..." << endl; cout << endl << endl; system("Pause"); // Hacer una pausa return 0; // Valor de retorno al S.O. } // Implementaci?n de Procedimientos y Funciones char menu() { char op; cout << " A. Insertar vuelo al sistema." << endl; cout << " B. Eliminar un vuelo del sistema." << endl; cout << " C. ..." << endl; cout << " F. Visualizar datos de todos los vuelos." << endl; //A?adir m?s opciones en caso de que sea necesario cout << " X. Salir del Programa" << endl; cout << endl; cout << "Introduzca su opcion: " ; op = cin.get(); cin.ignore(); op = toupper(op); // Completar la condici?n del while si hay m?s opciones while ( (op !='A') && (op!='B') && (op !='C') &&(op!='D') &&(op!='E') &&(op!='F') &&(op!='G')&&(op!='X') ) { cout << " Opcion Incorrecta ..." << endl; cout << endl; cout << " Introduzca su opcion: " ; op = cin.get(); cin.ignore(); op = toupper(op); } return op; } bool ConfirmaSalida() { char car; cout << "?Est? seguro de salir (S/N)?"; cin >> car; cin.ignore(); car = toupper(car); return (car=='S'); } TListaVuelo CrearListaVuelo() { return NULL; }// fin CrearListaVuelo TListaPasajero CrearListaPasajero() { return NULL; }// fin CrearListaPasajero void LeerVuelo(TVuelo &v) { cout << "Introduzca codigo de vuelo: "; getline(cin,v.cod_vuelo,ENTER); cout << "Introduzca numero de asientos libres: "; cin >>v.cod_vuelo; cin.ignore(); }// fin leerVuelo void InsertarVuelo(TListaVuelo &l,TVuelo vuelo,TError &error) { //variables TListaVuelo ptr; //inicio if (l==NULL) { l=new TNodoVuelo; if (l==NULL) { error=ErrorMemoriaLlena; } else { error=NoError; //l->vuelo=vuelo; l->vuelo.cod_vuelo=vuelo.cod_vuelo; l->vuelo.asientos_lib=vuelo.asientos_lib; l->vuelo.p = CrearListaPasajero(); l->sig=NULL; } } else { ptr =new TNodoVuelo; if (ptr==NULL) { error=ErrorMemoriaLlena; } else { error=NoError; //ptr->vuelo=vuelo; ptr->vuelo.cod_vuelo=vuelo.cod_vuelo; ptr->vuelo.asientos_lib=vuelo.asientos_lib; ptr->vuelo.p = CrearListaPasajero(); ptr->sig=l; l=ptr; } } }//Fin insertarVuelo void MostrarTodos(TListaVuelo l,TError &error) { //variables TListaVuelo ptr; //inicio if (l==NULL) { error=ErrorListaVacia; } else { error=NoError; ptr=l; while (ptr!=NULL) { MostrarVuelo(ptr); ptr=ptr->sig; } } }//fin MostrarTodos void MostrarVuelo(TListaVuelo l) { cout << "Codigo de vuelo: " << l->vuelo.cod_vuelo << endl; cout << "Asientos libres: " << l->vuelo.asientos_lib << endl; MostrarListaPasajeros(l->vuelo.p); cout << endl; }// fin MostrarVuelo void MostrarListaPasajeros(TListaPasajero lP) { //inicio TListaPasajero ptr; //variables if (lP==NULL) { cout << "Lista de pasajeros vacia." <<endl; } else { ptr=lP; while(ptr!=NULL) { MostrarPasajero(ptr->pasajero); ptr=ptr->sig; } } }// fin MostrarPasajeros void MostrarPasajero(TPasajero p) { cout << "Nombre Pasajero: " << p.nombre; cout << "Edad Pasajero: " << p.edad; cout << "DNI Pasajero: " << p.dni; cout << endl; }//fin MostrarPasajeros void EliminarVuelo(TListaVuelo &l,string cod,TError &error) { //variables TListaVuelo ptr,aux; bool en; //inicio en=false; if (l==NULL) { error=ErrorListaVacia; } else { if (l->vuelo.cod_vuelo==cod) { ptr=l; l=l->sig; delete (ptr); error=NoError; } else { ptr=l->sig; while( (ptr!=NULL) && (!en) ) { if (ptr->sig->vuelo.cod_vuelo==cod) { aux=ptr->sig; ptr->sig=aux->sig; BorrarPasajeros(aux->vuelo.p); delete(aux); error=NoError; en=true; } else { ptr=ptr->sig; } } } } if (!en) { error=ErrorElementoNoExiste; } }// fin EliminarVeulo void BorrarPasajeros(TListaPasajero &lP) { //variables TListaPasajero ptr; //inicio while(lP!=NULL) { ptr=lP; lP=lP->sig; delete(ptr); } }//fin borrar Pasajeros void MostrarError(TError error) { switch (error) { case NoError: cout << "Operacion realizada con exito"; break; case ErrorMemoriaLlena: cout << "Memoria Llena"; break; case ErrorListaVacia: cout << "La lista esta vacia"; break; case ErrorPasajerosVacios: cout << "No existen pasajeros en el vuelo"; break; case ErrorElementoNoExiste: cout << "El elemento solicitado no existe"; break; } }// fin mostrarError
Espero que alguien me pueda ayudar.