Ayuda con estructuras anidadas

Iniciado por mari2diaz, 20 Julio 2018, 00:50 AM

0 Miembros y 1 Visitante están viendo este tema.

mari2diaz

Cuando estoy introduciendo los datos me dice programa dejo de funcionar, si alguien puede ver mi error y decirme por favor
/* Se desea registrar una estructura Persona_Empleado que contenga como miembros los datos de una
persona empleado que a su vez tenga los datos de la fecha de nacimiento. En el programa se muestra
el uso de la estructura, se define una función para dar entrada a los datos de la estructura y otra
función para dar salida a los datos de una estructura persona. A la función de entrada se transmite
por dirección (&p) la variable estructura, por lo que el argumento correspondiente tiene que ser un
Ipuntero (*p) y el acceso a los campos se hace con el selector -> */

#include<stdio.h>

struct fecha{
int dia, mes, año;
};

struct persona{
char nombre[20];
int edad;
int altura;
int peso;
struct fecha f;
};

struct persona_empleado{
struct persona unapersona;
int salario;
int horas_por_semana;
};

/* Prototipo de funciones */

void entrada(struct persona_empleado *p);
void salida(struct persona_empleado up);

void main(){

/* Define una variable persona_empleado */
struct persona_empleado p;

/* Llamada a entrada() transmitiendo la direccion */
   entrada(&p);
   
   /* Salida de los datos almacenados */
   salida(p) ;

}

void entrada(struct persona_empleado *p){

printf("\nIntroduzca su nombre: ");
gets(p->unapersona.nombre);

printf("Introduzca su edad: ");
scanf("%d", p->unapersona.edad);


printf("Introduzca su altura: ");
scanf("%d", p->unapersona.altura);

printf("Introduzca su peso: ");
scanf("%d", p->unapersona.peso);

printf("Introduzca su fecha de nacimiento: ");
scanf("%d %d %d", p->unapersona.f.dia,
   p->unapersona.f.mes,
p->unapersona.f.año);

printf("Introduzca su salario: ");
scanf("%d", p->salario);

printf("Introduzca numero de horas");
scanf("%d", p->horas_por_semana);

}

void salida(struct persona_empleado up){
printf("\n\n\tDatos de un Empleado");
printf("\n\n\t--------------------");
printf("Nombre: %s\n", up.unapersona.nombre);
printf("Edad: %d\n", up.unapersona.edad);
printf("Fecha de nacimiento: %d-%d-%d", up.unapersona.f.dia,
   up.unapersona.f.mes,
up.unapersona.f.año);
printf("Altura: %d\n", up.unapersona.altura);
printf("Peso: %d\n", up.unapersona.peso);
printf("Salario: %d\n", up.salario);
printf("Numero de horas: %d\n", up.horas_por_semana);
}

engel lex

puedes indicar en que necesitas ayuda? no sabemos así sin más.... explica en todo detalle errores y dudas
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

mari2diaz

cuando pide la edad e introduzco el dato me dice programa dejo de funcionar

engel lex

tienes multiples de errores...

main siempre debe ser int y retornar 0 si todo fue bien... algunos compiladores soportan void, pero no está en el standard

para los nombres de las variables no se usan caracteres no ascii como la "ñ" porque no es standard y muchos compiladores no lo soportan

scanf("%d", p->unapersona.edad);

esto te dará un error de segmentación de memoria (el que tienes ahorita) porque eso lleva & por delante para poder acceder a su contenidoscanf("%d", &p->unapersona.edad);

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.