Ver Mensaje Individual
  #13 (permalink)  
Antiguo 20/03/2010, 18:45
nosek159
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: proplema con paso de punteros de structuras a funciones

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
Podrias publicar como quedo el programa finalmente? Seria de utilidad a los siguientes lectores de este foro.
por supuesto, aqui esta el codigo:

Main:

Código:
#include <stdio.h>
#include <stdlib.h>
struct personas {
    char nombre[15];
    int edad;
    struct personas *siguiente;
};


void main() {

    int opcion=10;
    struct personas *primera = NULL; //puntero q apuntara a la primera persona
    struct personas *ultima = NULL; // puntero q apuntara a la ultima persona
    int nPersonas=0; // numero de personas introducidas

     while (opcion!=0){
        puts("3. Insertar");
        puts("4. Mostrar");
        puts("0. Salir");
        puts("Haga su eleccion");
        scanf("%d",&opcion);
        fflush(stdin);

        switch(opcion){
            case 3: {
                insertar(&primera, &ultima, &nPersonas);
                break;
            }
            case 4: {
                mostrar(primera);
                break;
            }
            case 0: {
                puts("Hasta la proxima");
                break;
            }
            default: {
                puts("No es una opcion valida");
            }
        }
     }

}

funciones:

Código:
#include <stdio.h>
#include <stdlib.h>

struct personas {
    char nombre[15];
    int edad;
    struct personas *siguiente;
};

// insertar personas
void insertar(struct personas **primera, struct personas **ultima, int *nPersonas){

    struct personas *persona=NULL; //puntero que apuntara a la persona q estamos creando

// asignamos el espacio de memoria necesario para la persona
    if ((persona=malloc(sizeof(struct personas)))==NULL){
        puts("Error al asignar la memoria");
    } else {
        // pedimos los datos de la persona
        puts("Dime el nombre de la persona: ");
        gets(persona->nombre);
        fflush(stdin);
        puts("Dime la edad: ");
        scanf("%d",&persona->edad);
        fflush(stdin);
        persona->siguiente=NULL;
        // ponemos siguiente a null ya que la persona actual sera la ultima
        if (*primera==NULL){
            // si primera es null no tenemos personas y la primera y ultima seran la actual
            *ultima=persona;
            *primera=persona;
        } else {
            // si ya tenemos personas el puntero siguiente de la ultima persona apuntara
            // a la actual y la ultima sera esta
            (**ultima).siguiente=persona;
            *ultima=persona;
        }
        (*nPersonas)++;
        puts("Insercion correcta");
    }
}


// mostrar las personas de la lista
void mostrar(struct personas *primera){

    if ((primera==NULL)){
        puts("No hay personas insertadas");
    } else {
        struct personas *perActual=primera;
        // asignamos la primera persona al puntero y mos tramos sus datos
        do {
            printf("Nombre: %s\nEdad: %d\n",perActual->nombre, perActual->edad);
            // buscamos la siguiente persona y apuntamos a ella
            perActual=perActual->siguiente;
        } while(perActual!=NULL);
        
    }
}

Saludos,
Dani.