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:
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.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; } } }
Que estoy haciendo mal?
Gracias,
Dani.