Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Niber en 21 Mayo 2019, 13:50 pm



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  :)
Código:
#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