Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/05/2006, 11:29
Avatar de yournightmare86
yournightmare86
 
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 875
Antigüedad: 18 años, 8 meses
Puntos: 9
struct dentro de un struct.

Hola de nuevo. Aquí vengo con una nueva duda sobre C, en este caso sobre estructuras. Alguien podría decirme en qué falla mi programa?. Muchas gracias por su ayuda.

/*struct dentro de un struct.*/

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define N 100

typedef struct
{
int dia;
int mes;
int anyo;
}fnac;

typedef struct
{
char nombre[80];
char apellido[80];
struct fnac;
}tpersonas;


/*Prototipos de las funciones.*/

int numpersonas(void);
tpersonas* asignamemoria(int);
fnac* asignamemoria2(int);
int lee(tpersonas*,fnac*,int);
int menu();
int visualiza(tpersonas*,fnac*,int);
int liberamemoria(tpersonas*,fnac*);

/*Función main.*/

main()
{
int npersonas,op,i;
tpersonas *personas;
fnac *personass;
i=0;
while((op=menu())!=5)
{
switch(op)
{
case 1: numpersonas();
break;

case 2: personas=asignamemoria(npersonas);
if(personas==NULL) return -1;
personass=asignamemoria2(npersonas);
if(personass=NULL) return -1;
break;

case 3: while(i<npersonas)
{
i=lee(personas,personass,i);
}
break;

case 4: clrscr();
visualiza(personas,personass,npersonas);
break;

default: printf("\n Pulse 4 para salir.");
break;
}
}
liberamemoria(personas,personass);
printf("\n Fin de programa. Pulse cualquier tecla para finalizar.");
getch();
}

int menu()
{
int op;
do{
clrscr();
printf("\n\t\t 1.Introducir numero de personas.");
printf("\n\t\t 2.Asignar memoria.");
printf("\n\t\t 3.Entrada de datos.");
printf("\n\t\t 4.Visualizar datos.");
printf("\n\t\t 5.Salir.");
printf("\n\t Seleccion opcion: ");
scanf("%d",&op);
}while(op<1 || op>5);
return op;
}

int numpersonas(void)
{
int ok,np;
do{
clrscr();
printf("\n Introduce numero de personas: ");
ok=scanf("%d",&np);
} while((!ok) || (np<=0));
return np;
}

tpersonas * asignamemoria(int np)
{
tpersonas * q;
q=(tpersonas*)malloc(np*sizeof(tpersonas));
if(q==NULL) return NULL;
return q;
}

fnac * asignamemoria2(int np)
{
fnac * w;
w=(fnac*)malloc(np*sizeof(fnac));
if(w==NULL) return NULL;
return w;
}

int lee(tpersonas *p,fnac *f,int n) //n equivale a i en el main.. sirve para recorrer.
{
char sn[1];
do{
clrscr();
printf("\n Persona %d",n+1);
printf("\n Nombre: "); gets(p[n].nombre);
printf("\n Apellido: "); gets(p[n].apellido);
printf("\n Fecha nacimiento: ");
printf("\n\t Dia: "); scanf("%d",&f[n].dia);
printf("\n\t Mes: "); scanf("%d",&f[n].mes);
printf("\n\t Anyo: "); scanf("%d",&f[n].anyo);
printf("\n Datos correctos(s/n)? ");
scanf("%s",&sn[0]);
} while((sn[0]!='s') || (sn[0]!='S'));
return n+1;
}

int visualiza(tpersonas *p,fnac *f,int np)
{
int i;
for(i=0;i<np;i++)
{
clrscr();
printf("\n Persona %d",i+1);
printf("\n Nombre: "); puts(p[i].nombre);
printf("\n Apellido: "); puts(p[i].apellido);
printf("\n Fecha nacimiento: ");
printf("\n\t Dia: %d",f[i].dia);
printf("\n\t Mes: %d",f[i].mes);
printf("\n\t Anyo: %d",f[i].anyo);
getch();
}
return 0;
}

int liberamemoria(tpersonas *p,fnac *f)
{
free(p);
free(f);
return 0;
}

Última edición por yournightmare86; 09/05/2006 a las 12:42