
20/03/2010, 18:45
|
| | Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 16 años, 4 meses Puntos: 2 | |
Respuesta: proplema con paso de punteros de structuras a funciones Cita:
Iniciado por CalgaryCorpus 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. |