Definición del Programa

El programa está diseñado para gestionar información de empleados, incluyendo su nombre, dirección, ciudad, colonia y salario. Se utilizan dos estructuras: una para almacenar la dirección (info_direccion) y otra para almacenar la información del empleado (empleado), que incluye una instancia de info_direccion.

Código:

#include <iostream>
#include <conio.h>

using namespace std;

// Definición de la estructura para la dirección
struct info_direccion {
    char direccion[30];
    char ciudad[20];
    char colonia[20];
};

// Definición de la estructura para el empleado
struct empleado {
    char nombre[20];
    struct info_direccion dir_empleado; // Estructura anidada
    double salario;
} empleado[2]; // Arreglo de estructuras empleado

// Función principal
int main() {
    cout << "Programa para anidar, pedir, almacenar, y mostrar estructuras:" << endl;
    cout << "-------------------------------------------------------------" << endl << endl;

    // Pedir datos y almacenar con un bucle
    for (int i = 0; i < 2; i++) {
        // Limpiar el buffer de entrada
        fflush(stdin);

        // Entrada de datos para cada empleado
        cout << "Digite su nombre: ";
        cin.getline(empleado[i].nombre, 20, '\n');
        cout << "Digite su direccion: ";
        cin.getline(empleado[i].dir_empleado.direccion, 30, '\n');
        cout << "Digite su ciudad: ";
        cin.getline(empleado[i].dir_empleado.ciudad, 20, '\n');
        cout << "Digite su colonia: ";
        cin.getline(empleado[i].dir_empleado.colonia, 20, '\n');
        cout << "Digite su salario: ";
        cin >> empleado[i].salario;
        cout << "\n";

        // Limpiar el buffer de entrada después de leer el salario
        fflush(stdin);
    }

    // Mostrar los datos de los empleados
    for (int i = 0; i < 2; i++) {
        cout << "Nombre: " << empleado[i].nombre << endl;
        cout << "Dirección: " << empleado[i].dir_empleado.direccion << endl;
        cout << "Ciudad: " << empleado[i].dir_empleado.ciudad << endl;
        cout << "Colonia: " << empleado[i].dir_empleado.colonia << endl;
        cout << "Salario: " << empleado[i].salario << endl;
        cout << "\n\n";
    }

    getch(); // Espera a que el usuario presione una tecla
    return 0;
}

Explicación del Código

  1. Definición de Estructuras:

    • info_direccion: Estructura que contiene los campos para almacenar la dirección, ciudad y colonia.
    • empleado: Estructura que incluye el nombre del empleado, una instancia de info_direccion para la dirección, y el salario del empleado. Se declara un arreglo de dos empleados para almacenar la información de dos empleados.
  2. Entrada de Datos:

    • Se utiliza un bucle for para leer los datos de dos empleados. Para cada empleado, se piden los datos del nombre, dirección, ciudad, colonia y salario. La función fflush(stdin) se usa para limpiar el buffer de entrada, asegurando que no queden datos no deseados entre las entradas.
  3. Mostrar Datos:

    • Otro bucle for recorre el arreglo de empleados y muestra la información almacenada en cada estructura.
  4. Notas Adicionales:

    • cin.getline se usa para leer cadenas de texto con espacios, y cin se usa para leer valores numéricos como el salario.
    • fflush(stdin) es utilizado para limpiar el buffer de entrada después de leer el salario, evitando problemas con la lectura de datos subsiguientes.

Ventajas de Usar Estructuras Anidadas

  • Organización: Agrupa datos relacionados en una sola estructura, haciendo que el código sea más organizado y fácil de entender.
  • Modularidad: Facilita la reutilización de estructuras en diferentes contextos y escenarios.
  • Claridad: Mejora la legibilidad del código al representar datos complejos de manera estructurada.