Hola amigos.
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:
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");
}
}
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:
Código:
Nombre: Juan
Apellido: Bartolome
Num aficiones: 3
Aficion: (null)
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??
Tendria que quedar asi:
Código:
Nombre: Juan
Apellido: Bartolome
Num aficiones: 3
Aficion: futbol
Aficion: cartas
Aficion: dormir
Muchas gracias por vuestro tiempo, un saludo.