136 lines
3.7 KiB
C
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);
|
|
}
|
|
|