Hola a todos, estoy intentando hacer un programa q realice las siguientes tareas.
Mantener una lista de personas, poder introducir, modificar o borrar personas y guardarlas en un archivo binario.
El problema q tengo es q me declaro un puntero q apunta a la primera persona de la lista y otro a la ultima y cuando paso este puntero a la funcion tiene un valor distinto al q esta en el main y no entiendo muy bien xk. El archivo main es el siguiente (resumiendo un poco):
Código:
#include <stdio.h>
#include <stdlib.h>
struct personas {
char *nombre;
int edad;
struct personas *siguiente;
};
int main(int argc, char** argv) {
int opcion=10;
// declaro los punteros de tipo personas q aun no apuntan a ningun sitio
struct personas *primera;
struct personas *ultima;
int nPersonas=0;
scanf("%d",&opcion);
fflush(stdin);
switch(opcion){
case 3: {
primera=insertar(primera, ultima, &nPersonas);
break;
}
case 4: {
mostrar(primera, &nPersonas);
break;
}
case 0: {
puts("Hasta la proxima");
break;
}
default: {
puts("No es una opcion valida");
}
}
}
return (EXIT_SUCCESS);
}
este es el archivo de las funciones:
Código:
struct personas {
char *nombre;
int edad;
struct personas *siguiente;
};
// le paso el apuntador a la primera persona, a la ultima y el numero de personas
void insertar(struct personas *primera, struct personas *ultima, int *nPersonas){
char *nombre;
int edad=0;
struct personas *persona;
// asignamos el espacio de memoria al apuntador persona de tipo personas
if ((persona=malloc(sizeof(struct personas)))==NULL){
puts("Error al asignar la memoria");
} else {
// pedimos los datos y los guardamos en la estructura
puts("Dime el nombre de la persona: ");
gets(&nombre);
fflush(stdin);
puts("Dime la edad: ");
scanf("%d",&edad);
fflush(stdin);
strcpy(persona->nombre,&nombre);
persona->edad=edad;
persona->siguiente=NULL;
if ((*nPersonas)==0){
// si es la primera persona q insertamos el puntero primera y ultima apuntan a esta persona
ultima=persona;
primera=persona;
} else {
// si ya tenemos mas personas la ultima apuntara a esta y esta sera la ultima
ultima->siguiente=persona;
}
(*nPersonas)++;
puts("Insercion correcta");
}
}
void mostrar(struct personas *primera, int *nPersonas){
struct personas *perActual=primera;
int cont=0;
for (cont=0;cont<(*nPersonas);cont++){
printf("Nombre: %s\nEdad: %d\n",perActual->nombre,perActual->edad);
if (perActual->siguiente!=NULL){
perActual=perActual->siguiente;
}
}
}
como veis dentro de la funcion insertar cambio el valor de primera y ultima pero cuando sale de la funcion, en el main, estos dos punteros siguen teniendo el mismo valor q antes.
Que estoy haciendo mal?
Gracias,
Dani.