Estoy haciendo un programa en el cual tengo una lista enlazada dentro de otra. Me explico, la lista principal contiene:
nombre
apellidos
lista enlazada aficiones
La lista de aficiones debe tener al menos una aficion. Pues bien, consigo almacenar todo bien. Pero cuando voy a mostrar la lista principal (que a su vez dentro debe mostrar estas aficones) las aficiones no me salen, me imprime (null) como si estuviese apuntando al final.
Como podria hacer que esta lista de aficiones apunte a su primer elemento??
El lenguaje de programacion es C.
Tengo una cabecera llamada estructuras.h:
Código:
typedef struct aficion { char tipo [100]; // Nombre de la categoria char descripcion [300]; struct aficion *siguiente; }aficion; // Definimos el tipo de estructura como tipo categoria typedef struct nodo { char nombre [100]; // Nombre del jugador char apellido [100]; int numaficiones; aficion *extra; struct nodo *siguiente; }Nodo;
Almaceno los datos asi (interpretar es una funcion proporcionada por el maestro, que funciona perfectamente):
Código:
Nodo *nuevo; while (fgets(linea,500,fichero)!=NULL) { lectura=interpretar(linea, etiqueta,parametro,campo); if ((lectura==1)&&(strcmp(etiqueta,"NOMBRE")==0)) strcpy(nuevo->nombre,campo); if ((lectura==1)&&(strcmp(etiqueta,"APELLIDO")==0)) strcpy(nuevo->apellido,campo); if ((lectura==3)&&(strcmp(etiqueta,"AFICIONES")==0)) nuevo->numaficiones=atoi(parametro); if ((lectura==1)&&(strcmp(etiqueta,"A")==0)) { nuevo->extra=(aficion*)malloc(sizeof(aficion)); strcpy(nuevo->aficion->tipo,campo); nuevo->aficion=nuevo->aficion->siguiente; } }
Y muestro la lista asi:
Código:
El caso es que almacena todo bien, y cuando voy a la funcion mostrar me muestra perfectamente todos los nombres, apellidos y numero de aficiones, pero no me muestra el tipo de las aficiones:void MostrarLista(Nodo *cabeza) { Nodo *nodo = cabeza; if(ListaVacia(cabeza)) printf("Actualmente no se encuentra ningun usuario en nuestra base de datos\n"); else { while(nodo) { printf("Nombre: %s\nApellido: %s\nNumero aficiones: %d\n\n", nodo->nombre,nodo->apellido,nodo->numaficiones); while (nodo->extra!=NULL) { printf ("\tAficion: %s\n\n",nodo->extra->tipo); nodo->extra=nodo->extra->siguiente; } nodo = nodo->siguiente; } printf("\n\n"); } }
Código:
Es como si la lista de aficiones o estuviese vacia o estuviese apuntando al final. COmo podria hacer para que apunte a su primer nodo y muestre todos los datos que tiene??Nombre: Juan Apellido: Bartolome Num aficiones: 3 Aficion: (null)
Tendria que quedar asi:
Código:
Muchas gracias por vuestro tiempo, un saludo. Nombre: Juan Apellido: Bartolome Num aficiones: 3 Aficion: futbol Aficion: cartas Aficion: dormir