SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: SpeDhy en Domingo 12 de Diciembre de 2004, 03:21

Título: Problemas Con Listas
Publicado por: SpeDhy en Domingo 12 de Diciembre de 2004, 03:21
Código: Text
  1. #include<iostream.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<stdio.h>
  5. #include<conio.h>
  6. #include<alloc.h>
  7.  
  8.  
  9. struct avion {
  10.   char *nombre;
  11.   int asiento;
  12.   struct avion *L;
  13. };
  14. struct avion *pa, *q, *n;
  15. struct avion *p=NULL;
  16. int t=1;
  17.  
  18.  
  19.  
  20. //Creacion de los lugares
  21.  
  22. void creacion(void)
  23. {
  24.   int i;
  25.   q=p;
  26.   for (i=1; i<=10; i++)
  27.     {
  28.     n=(struct avion *)malloc(sizeof(struct avion));
  29.     if (q==NULL)
  30.       q=p=n;
  31.     else
  32.       {
  33.         while(q->L != NULL)
  34.           q=q->L;
  35.         q->L=n;
  36.       }
  37.     n->asiento=i;
  38.     n->nombre=NULL;
  39.     n->L=NULL;
  40.   }
  41. }
  42.  
  43.  
  44.  
  45.  
  46. //Busca si hay algun lugar disponible
  47.  
  48. int buscar(int lugar)
  49. {
  50.   q=p;
  51.  
  52.   while(q->asiento != lugar && q->L != NULL)
  53.     q=q->L;
  54.   if (lugar == q->asiento && q->nombre == NULL)
  55.       return 1;
  56.   else
  57.       return 0;
  58. }
  59.  
  60.  
  61.  
  62.  
  63. //Reserva un lugar para el pasajero
  64.  
  65. void insertar(void)
  66. {
  67.   char *name;
  68.   int lugar, x=1;
  69.  
  70.   if (t <= 10)
  71.     {
  72.       do {
  73.         clrscr();
  74.         cout<<"\nNumero de asiento: ";
  75.         cin>>lugar;
  76.         cout<<"\nNombre del pasajero: ";
  77.         gets(name);
  78.  
  79.         if (buscar(lugar)==1)
  80.           {
  81.             q=p;
  82.             while(q->asiento != lugar && q->L != NULL)
  83.               q=q->L;
  84.             q->nombre=name;
  85.             t++;
  86.             x=0;
  87.           }
  88.         else
  89.           cout<<"\nAsiento no disponible";
  90.       }  while(x);
  91.     }
  92.   else
  93.     cout<<"\nNo hay lugar disponible";
  94. }
  95.  
  96. int eliminar(void)
  97. {
  98.   int lugar;
  99.  
  100.   if (t >= 1)
  101.     {
  102.     cout<<"Lugar que desea eliminar: ";
  103.     cin>>lugar;
  104.  
  105.     q=p;
  106.     while(q->asiento != lugar && q->L != NULL)
  107.       q=q->L;
  108.     if (q->nombre == NULL)
  109.       {
  110.       cout<<"\nEl lugar esta vacio";
  111.       return 1;
  112.       }
  113.     else
  114.       q->nombre=NULL;
  115.     t--;
  116.     }
  117.     return 1;
  118. }
  119.  
  120.  
  121. //Muestra los lugares
  122.  
  123. void mostrar(void)
  124. {
  125.   q=p;
  126.  
  127.   cout<<endl<<endl;
  128.   while(q->L != NULL)
  129.     {
  130.       if (q->nombre != NULL)
  131.         cout<<"  "<<q->asiento<<"  "<<q->nombre<<endl;
  132.       else
  133.         cout<<"  "<<q->asiento<<"  "<<"Lugar disponible!!!"<<endl;
  134.       q=q->L;
  135.     }
  136. }
  137.  
  138.  
  139.  
  140.  
  141. void main(void)
  142. {
  143.   char opcion;
  144.   creacion();
  145.   do {
  146.     clrscr();
  147.     cout<<"\n1.-Reservar lugar";
  148.     cout<<"\n2.-Dar de baja un lugar";
  149.     cout<<"\n3.-MOstrar lista de pasajeros";
  150.     cout<<"\n4.-Buscar un pasajero";
  151.     cout<<"\n5.-Salir";
  152.     cout<<"\nOpcion: ";
  153.     cin>>opcion;
  154.  
  155.     switch(opcion)
  156.     {
  157.       case '1': insertar();
  158.         break;
  159.       case '2': eliminar();
  160.         break;
  161.       case '3': mostrar();
  162.         break;
  163.       case '4':
  164.         break;
  165.       case '5': exit(0);
  166.         break;
  167.       default: cout<<"\nOpcion incorrecta";
  168.     }
  169.     getch();
  170.   } while(opcion != '5');
  171. }
  172.  
  173.  



Creo que en esta parte es donde esta el problema.

Código: Text
  1. if (buscar(lugar)==1)
  2.           {
  3.             q=p;
  4.             while(q->asiento != lugar && q->L != NULL)
  5.               q=q->L;
  6.             q->nombre=name;    [B]<-----[/B]-
  7.             t++;
  8.             x=0;
  9.           }
  10.  

El problema esta en que el programa me empalma los nombres, cuando pongo otro nombre me lo pone en su lugar, pero tambien en los lugares donde habia mas nombres.

Ojala alguien pueda hecharme una mano :D

saludos...
Título: Re: Problemas Con Listas
Publicado por: mgitano2001 en Martes 14 de Diciembre de 2004, 05:28
El problema radica en que tenes mal definidas algunas variables, por ejemplo:
char *nombre; Aca estas declarando un puntero a caracter, es decir no tenes el espacio como para guardar un nombre, para los strings en C/C++, tenes que asignar un espacio.
Consejo: cambia todos char *nombre a char nombre[12] (El tamaño armalo vos), cuando asignas un string a otro usa strcpy().

Espero que te sirva, Saludos. Despues comentame.

                 Mgitano2001
Título: Re: Problemas Con Listas
Publicado por: lagom en Domingo 19 de Diciembre de 2004, 02:20
si la variable global (int  t)  se refiere al numero de asiento del avion entonces dedes darle algun valor  durante la ejecucion del programa ya que  utilizas condiciones que involucran a esta varible  pero no le cambias el valor  t=1
Título: Re: Problemas Con Listas
Publicado por: conchaxuxa en Domingo 19 de Diciembre de 2004, 06:44
si qieres las variables globales usar asignale valor