elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cargar una lista [SOLUCIONADO]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cargar una lista [SOLUCIONADO]  (Leído 3,234 veces)
pitka

Desconectado Desconectado

Mensajes: 25



Ver Perfil
Cargar una lista [SOLUCIONADO]
« en: 18 Mayo 2012, 22:09 pm »

Hola apenas estoy empezando con punteros y listas, quiero hacer un programa que vaya leyendo por teclado nombre y edad de una persona y lo vaya almacenando en a lista(sin conocer la cantidad de personas que vayan a ser registradas) y luego mostrar todas esas personas, pero estoy atascado,  me han dicho que tengo que usar un puntero auxiliar que guarde el primer valor o algo así pero de verdad me gustaría entender el porque.

gracias de antemano, aquí dejo lo que llevo

Saludos

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct nodo
  5.    {
  6.        string nombre;
  7.        int edad;
  8.        nodo *siguiente;      
  9.    };
  10.  
  11. int main(void)
  12. {
  13.  
  14. nodo *persona;
  15. char resp;
  16.  
  17.  
  18. do
  19. {
  20.      persona = new nodo;
  21.      cout<<"introduzca el nombre: ";
  22.      cin>>persona->nombre;
  23.      cout<<"introduzca la edad: ";
  24.      cin>>persona->edad;
  25.      cout<<"Salir? S/N ";
  26.      cin>>resp;
  27. }while(resp!='s');
  28.  
  29. p = persona;
  30.  
  31. while (p->siguiente != NULL)
  32. {
  33.      cout<<p->nombre<<endl;
  34.      cout<<p->edad<<endl;
  35.      p=p->siguiente;  
  36. }
  37.  
  38. system("pause");
  39.  
  40. }


« Última modificación: 20 Mayo 2012, 19:11 pm por pitka » En línea

Aberroncho
Colaborador
***
Desconectado Desconectado

Mensajes: 1.738


Daría todo lo que sé por la mitad de lo que ignoro


Ver Perfil
Re: Cargar una lista (ayuda)
« Respuesta #1 en: 19 Mayo 2012, 23:13 pm »



Código
  1. do
  2. {
  3.      persona = new nodo;
  4.      cout<<"introduzca el nombre: ";
  5.      cin>>persona->nombre;
  6.      cout<<"introduzca la edad: ";
  7.      cin>>persona->edad;
  8.      cout<<"Salir? S/N ";
  9.      cin>>resp;
  10. }while(resp!='s');
  11.  

El problema que veo es que en cada iteración del bucle reservas un nuevo nodo y guardas su dirección en el puntero "persona" con lo que pierdes la referencia al primer nodo de tu lista y tu puntero "persona" solo apunta al último elemento.

Además, tampoco estás enlazando los nodos. Cada uno de tus nodos tiene un puntero llamado "siguiente". Ese puntero deberías inicializarlo a null cuando creas el nodo y darle el valor del siguiente nodo de la lista cada vez que añadas un nuevo nodo por detrás de él.

Yo haría algo así:

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct nodo
  5. {
  6.    string nombre;
  7.    int edad;
  8.    nodo *siguiente;      
  9. };
  10.  
  11. int main(void)
  12. {
  13.    nodo     * pInicioLst = NULL;
  14.    nodo     * pFinLst    = NULL;
  15.    char       resp       = 'N' ;
  16.  
  17.  
  18.    do
  19.    {
  20.    if ( pInicioLst == NULL ) /* Primera vez. No hay ningún nodo en la lista */
  21. {
  22. pFinLst = pInicioLst = new nodo;
  23. pFinLst->siguiente = NULL; /* Indica que es el último nodo de la lista */
  24. }
  25. else /* No es la primera pasada. NO TOCAMOS EL PUNTERO AL PRIMER NODO */
  26. {
  27. pFinLst->siguiente = new nodo; /* Nuevo nodo apuntado por el último nodo de la lista */
  28. pFinLst = pFinLst->siguiente; /* Avanzamos el puntero al último nodo de la lista */
  29. pFinLst->siguiente = NULL;
  30.        }
  31.  
  32.        cout<<"introduzca el nombre: ";
  33.        cin>>persona->nombre;
  34.        cout<<"introduzca la edad: ";
  35.        cin>>persona->edad;
  36.        cout<<"Salir? S/N ";
  37.        cin>>resp;
  38.    }while(resp!='s');
  39.  
  40. p = pInicioLst; /* Apuntamos "p" al primer nodo para recorrer la lista */
  41.  


En línea

"La ignorancia es la noche de la mente, pero una noche sin Luna ni estrellas."
(Confucio)
pitka

Desconectado Desconectado

Mensajes: 25



Ver Perfil
Re: Cargar una lista (ayuda)
« Respuesta #2 en: 20 Mayo 2012, 18:25 pm »

muchísimas gracias me ayudo mucho  :D  ;-) y la explicación excelente al final lo deje así y funciona bien, toda critica sera bien recibida, muchas gracias nuevamente.

ahora una pregunta que no viene tanto con el tema, es posible validar que solo se escriban números o que solo acepte números en donde pido la edad y letras en donde pido el nombre?

Saludos
« Última modificación: 22 Mayo 2012, 18:15 pm por pitka » En línea

Aberroncho
Colaborador
***
Desconectado Desconectado

Mensajes: 1.738


Daría todo lo que sé por la mitad de lo que ignoro


Ver Perfil
Re: Cargar una lista (ayuda)
« Respuesta #3 en: 20 Mayo 2012, 18:45 pm »

Espero que además de dejarlo así hayas entendido porqué es así. Ese era el objetivo ;)

En cuanto a los formatos para la entrada de datos:
En línea

"La ignorancia es la noche de la mente, pero una noche sin Luna ni estrellas."
(Confucio)
pitka

Desconectado Desconectado

Mensajes: 25



Ver Perfil
Re: Cargar una lista (ayuda)
« Respuesta #4 en: 20 Mayo 2012, 19:01 pm »

Espero que además de dejarlo así hayas entendido porqué es así. Ese era el objetivo ;)

En cuanto a los formatos para la entrada de datos:
si de verdad muchísimas gracias lo he entendido perfectamente, lo de los enlaces y la explicación excelente como dije!! cualquier duda estaré molestando nuevamente por aca  :rolleyes: jaja

De nuevo gracias, así provoca aprender![/list]
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con SQL al cargar datos en una lista
Bases de Datos
GhostLT 2 3,418 Último mensaje 24 Febrero 2011, 20:43 pm
por GhostLT
Cargar Lista de un fichero con fseek a una lista auxiliar en el programa.
Programación C/C++
samur88 1 3,365 Último mensaje 12 Mayo 2011, 23:25 pm
por samur88
Cargar .TXT en un listbox ayuda !!!
.NET (C#, VB.NET, ASP)
llAudioslavell 7 13,063 Último mensaje 15 Septiembre 2011, 20:45 pm
por llAudioslavell
Ayuda cargar evento al cargar tabPageX
Programación Visual Basic
Kaxperday 3 2,627 Último mensaje 19 Noviembre 2014, 23:09 pm
por ivancea96
Ayuda en lista C++ !!!
Programación C/C++
Necrø 1 2,075 Último mensaje 10 Octubre 2016, 20:09 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines