Files
Curso_de_Programacion_C/8. Estructuras y uniones/Programas/Programa 8.3/Programa 8.3.c
2022-11-16 18:17:05 -04:00

129 lines
3.6 KiB
C

#include <stdio.h>
#include <string.h>
/* Estructuras-3.
El programa muestra la manera en que se declara una estructura anidada, así
➥como la forma de acceso a los campos de las variables o apuntadores de tipo
➥estructura, tanto para lectura como para escritura. Se utiliza además una
➥función que recibe como parámetro un apuntador de tipo estructura. */
typedef struct /* Declaración de la estructura domicilio utilizando un typedef. */
{
char calle[20];
int numero;
int cp;
char localidad[20];
} domicilio;
struct empleado /* Declaración de la estructura anidada empleado. */
{
char nombre[20];
char departamento[20];
float sueldo;
domicilio direccion; /* direccion es un campo de tipo estructura domicilio de la estructura empleado. */
};
void Lectura(struct empleado* a)
/* Función que permite leer los campos de un apuntador de tipo estructura
➥empleado. */
{
printf("\nIngrese el nombre del empleado: ");
gets(a->nombre);
fflush(stdin);
printf("Ingrese el departamento de la empresa: ");
gets(a->departamento);
printf("Ingrese el sueldo del empleado: ");
scanf("%f", &a->sueldo);
fflush(stdin);
printf("—-Ingrese la direccion del empleado—-");
printf("\n\tCalle: ");
gets(a->direccion.calle);
printf("\tNumero: ");
scanf("%d", &a->direccion.numero);
printf("\tCodigo Postal: ");
scanf("%d", &a->direccion.cp);
fflush(stdin);
printf("\tLocalidad: ");
gets(a->direccion.localidad);
}
void main(void)
{
struct empleado e0 = {"Arturo", "Compras", 15500.75, "San Jeronimo", 120, 3490, "Toluca"};
struct empleado*e1, *e2, e3, e4;
/* Se declaran diferentes variables y apuntadores de la estructura empleado
➥para que el lector pueda apreciar también las diferentes formas en que los campos reciben valores. */
/* En el programa principal se leen los campos de una variable, e3, y un
➥apuntador de tipo estructura, *e1. */
e1 = new (struct empleado);
printf("\nIngrese el nombre del empleado 1: ");
scanf("%s", &(*e1).nombre);
fflush(stdin);
printf("Ingrese el departamento de la empresa: ");
gets(e1->departamento);
printf("Ingrese el sueldo del empleado: ");
scanf("%f", &e1->sueldo);
printf("—-Ingrese la direccion del empleado—-”");
printf("\n\tCalle: ");
fflush(stdin);
gets(e1->direccion.calle);
printf("\tNumero: ");
scanf("%d", &e1->direccion.numero);
printf("\tCodigo Postal: ");
scanf("%d", &e1->direccion.cp);
printf("\tLocalidad: ");
fflush(stdin);
gets(e1->direccion.localidad);
printf("\nIngrese el nombre del empleado 3: ");
scanf("%s", &e3.nombre);
fflush(stdin);
printf("Ingrese el departamento de la empresa: ");
gets(e3.departamento);
printf("Ingrese el sueldo del empleado: ");
scanf("%f", &e3.sueldo);
printf("—-Ingrese la direccion del empleado—-");
printf("\n\tCalle: ");
fflush(stdin);
gets(e3.direccion.calle);
printf("\tNumero: ");
scanf("%d", &e3.direccion.numero);
printf("\tCodigo Postal: ");
scanf("%d", &e3.direccion.cp);
printf("\tLocalidad: ");
fflush(stdin);
gets(e3.direccion.localidad);
/* En la función Lectura se leen los campos de una variable, e4, y un apuntador
➥de tipo estructura, *e2. */
e2 = new (struct empleado); //Revisar operador "new"
Lectura(e2);
Lectura(&e4);
printf("\nDatos del empleado 1:\n");
printf("%s\t %s\t %.2f\t %s\t %d\t %d\t %s", e1->nombre, e1->departamento, e1->sueldo, e1->direccion.calle, e1->direccion.numero, e1->direccion.cp, e1->direccion.localidad);
printf("\nDatos del empleado 4:\n");
printf("%s\t %s\t %.2f\t %s\t %d\t %d\t %s", e4.nombre, e4.departamento, e4.sueldo, e4.direccion.calle, e4.direccion.numero, e4.direccion.cp, e4.direccion.localidad);
}