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

136 lines
3.7 KiB
C

#include <stdio.h>
#include <string.h>
/* Uniones.
El programa muestra la manera como se declara una unión, así como la forma de
➥acceso a los campos de las variables de tipo unión tanto para asignación
➥de valores como para lectura y escritura. */
union datos /* Declaración de una unión. */
{
char celular[15];
char correo[20];
};
typedef struct /* Declaración de una estructura utilizando typedef. */
{
int matricula;
char nombre[20];
char carrera[20];
float promedio;
union datos personales;
/* Observa que uno de los campos de la estructura alumno es una unión. */
} alumno;
void Lectura(alumno a); /* Prototipo de función. */
void main(void)
{
alumno a1 = { 120, "Maria", "Contabilidad", 8.9, "5-158-40-50"}, a2, a3;
/* Observa que sólo el primer componente de una unión puede recibir valores por
➥medio de este tipo de asignaciones. */
/* Para que puedas observar las diferentes formas en que los campos de las
➥variables de tipo estructura alumno reciben valores, ingresamos los valores
➥de los campos de tres formas diferentes. Los campos de a1 reciben valores
➥directamente, los campos de a2 se leen en el programa principal, y los campos
➥de a3 reciben valores a través de una función. */
printf("Alumno 2\n");
printf("Ingrese la matricula: ");
scanf("%d", &a2.matricula);
fflush(stdin);
printf("Ingrese el nombr : ");
gets(a2.nombre);
fflush(stdin);
printf("Ingrese la carrera: ");
gets(a2.carrera);
printf("Ingrese el promedio: ");
scanf("%f", &a2.promedio);
fflush(stdin);
printf("Ingrese el correo electronico: ");
gets(a2.personales.correo);
/* Observa que en la variable a2 de tipo estructura alumno el segundo campo de la
➥unión recibe un valor. */
printf("Alumno 3\n");
Lectura(&a3); /* Se llama a una función para leer los campos de la variable a3. */
/* Impresión de resultados. */
printf("\nDatos del alumno 1\n");
printf("%d\n", a1.matricula);
puts(a1.nombre);
puts(a1.carrera);
printf("%.2f\n", a1.promedio);
puts(a1.personales.celular);
/* Observa que escribe el valor del teléfono celular asignado. */
puts(a1.personales.correo);
/* Observa que si tratamos de imprimir el campo correo, escribe basura. */
strcpy(a0.personales.correo, "hgimenez@hotmail.com");
/* Se ingresa ahora un valor al segundo campo de la unión de la variable a0. */
puts(a0.personales.celular);
/* Ahora escribe basura en el campo del teléfono celular. */
puts(a0.personales.correo);
/* Escribe el contenido del campo (hgimenez@hotmail.com). */
printf("\nDatos del alumno 2\n");
printf("%d\n", a2.matricula);
puts(a2.nombre);
puts(a2.carrera);
printf("%.2f\n", a2.promedio);
puts(a2.personales.celular); /* Escribe basura. */
puts(a2.personales.correo); /* Escribe el contenido del segundo campo. */
printf("Ingrese el telefono celular del alumno 2: ");
fflush(stdin);
gets(a2.personales.celular);
puts(a2.personales.celular); /* Escribe el teléfono celular ingresado. */
puts(a2.personales.correo); /* Ahora escribe basura. */
printf("\nDatos del alumno 3\n");
printf("%d\n", a3.matricula);
puts(a3.nombre);
puts(a3.carrera);
printf("%.2f\n", a3.promedio);
puts(a3.personales.celular);
puts(a3.personales.correo); /* Escribe basura. */
}
void Lectura(alumno* a)
/* La función Lectura se utiliza para leer los campos de una variable de tipo
➥estructura alumno. */
{
printf("\nIngrese la matricula: ");
scanf("%d", &(*a).matricula);
fflush(stdin);
printf("Ingrese el nombre: ");
gets(a->nombre);
fflush(stdin);
printf("Ingrese la carrera: ");
gets((*a).carrera);
printf("Ingrese el promedio: ");
scanf("%f", &a->promedio);
printf("Ingrese el telefono celular: ");
fflush(stdin);
gets(a->personales.celular);
}