Título: C -Error en lista enlazada simple
Publicado por: Niber en 21 Mayo 2019, 13:50 pm
Hola, estoy intentando hacer un lista enlazada simple, pero me da un error en ejecución cuando lee los datos. No se que he hecho mal. Podriais ayudarme? Gracias :) #include <stdio.h> #include <stdlib.h> //----ESTRUCTURAS----- struct contacto{ char nombre[30]; int tlf; }; struct agenda{ struct contacto datos; struct agenda *next; };
// ---FUNCIONES-- //int menu(); void addContacto(struct agenda *pinicio,struct agenda *pultimo); void mostrarAgenda(struct agenda *pinicio); // *************************************************** void main() { struct agenda *pinicio,*pultimo; pinicio=NULL; pultimo=NULL; int pos=0; //for (pos=0;pos<3;pos++) //{ addContacto(pinicio,pultimo); //} mostrarAgenda(pinicio); } //---------------------------------- void addContacto(struct agenda *pinicio,struct agenda *pultimo) { struct agenda *pnuevo=NULL //Asignar memoria pnuevo=(struct agenda *)malloc(sizeof(struct agenda)); if (pnuevo==NULL) printf("\n No hay memoria"); else { printf("\n Nombre: "); scanf(" %s",pnuevo->datos.nombre); fflush(stdin); printf("\n TLF: "); scanf("%d",pnuevo->datos.tlf); fflush(stdin); pnuevo->next=NULL; if (pinicio==NULL)//Si lista vacia { pinicio=pnuevo; pultimo=pnuevo; } else { pultimo->next=pnuevo; pultimo=pnuevo; }
} } //----------------------- void mostrarAgenda(struct agenda *pinicio) { struct agenda *paux; paux=pinicio; do{ if (paux!=NULL) { printf("\n %s",paux->datos.nombre); printf("\n %d",paux->datos.tlf); paux=paux->next; } }while (paux->next!=NULL); }
Título: Re: C -Error en lista enlazada simple
Publicado por: CalgaryCorpus en 21 Mayo 2019, 15:31 pm
Te sugiero esto: - indica cual es el error que te da. Decir que "te da un error" no ayuda a ayudarte. - En C, si quieres modificar una variable dentro de una funcion, tienes que pasar un puntero a esa variable y desreferenciar ese puntero al modificar el valor. Si no lo haces, y solo pasas la variable, estas modificando una copia. - si lo que quieres modificar es un puntero, tienes que pasar la direccion de memoria de ese puntero y recibirla usando un puntero a puntero. Cuando corresponda modificarlo, desreferenciar el puntero a puntero tal como se hace en general (lo dicho en el punto anterior).
Título: Re: C -Error en lista enlazada simple
Publicado por: Niber en 22 Mayo 2019, 00:04 am
Efectivamente estaba haciendo mal, el paso de referencia de un puntero (entre otras cosas) Después de darle bastantes vueltas he conseguido que funcione. Gracias
|