Foros del Web » Programación para mayores de 30 ;) » C/C++ »

ayuda en error absurdo al leer

Estas en el tema de ayuda en error absurdo al leer en el foro de C/C++ en Foros del Web. Buenas, vereis tengo una duda con un codigo en c++,la cosa está en que se hacer lo que tengo que hacer, pero no se porque ...
  #1 (permalink)  
Antiguo 20/04/2010, 15:28
 
Fecha de Ingreso: octubre-2008
Mensajes: 184
Antigüedad: 15 años, 6 meses
Puntos: 1
ayuda en error absurdo al leer

Buenas, vereis tengo una duda con un codigo en c++,la cosa está en que se hacer lo que tengo que hacer, pero no se porque no me lo hace.
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:
/*----------------------------------------------------------------
|	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
Tiene mucho codigo pero lo unico a mirar es el LeerVuelo.
Espero que alguien me pueda ayudar.

Última edición por Olbapk; 20/04/2010 a las 15:40
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:01.