Resumen: Modificar estructuras - Ptr
Parte de la sección Lógica y Flujo del Journey de C de Coddy. Lección 49 de 63.
Desafío
FácilCrea un programa en C que demuestre un sistema completo de gestión de empleados utilizando asignación dinámica de memoria, punteros a estructuras y funciones. Tu programa debe:
- Definir una
structllamadaEmployeecon los siguientes miembros:- Un entero
idpara almacenar el ID del empleado - Un arreglo de caracteres
namede tamaño 50 para almacenar el nombre del empleado - Un arreglo de caracteres
departmentde tamaño 30 para almacenar el nombre del departamento - Un número de punto flotante
salarypara almacenar el salario del empleado - Un entero
yearsOfServicepara almacenar los años de servicio
- Un entero
- Escribir una función llamada
fillEmployeeDataque:- Reciba como parámetro un puntero a una estructura
Employee - Lea la información del empleado desde la entrada en este orden: ID, nombre, departamento, salario, años de servicio
- Asigne los valores a los miembros de la estructura utilizando el operador flecha
- Calcule un bono según los años de servicio: si years >= 5, el bono es el 10% del salario; de lo contrario, es el 5% del salario
- Agregue el bono al salario:
empPtr->salary += bonus;
- Reciba como parámetro un puntero a una estructura
- Escribir una función llamada
displayEmployeeque:- Reciba como parámetro un puntero a una estructura
Employee - Imprima la información del empleado en este formato exacto:
Employee Details:ID: [id]Name: [name]Department: [department]Salary: [salary]Years of Service: [yearsOfService]
- Reciba como parámetro un puntero a una estructura
- Escribir una función llamada
promoteEmployeeque:- Reciba como parámetro un puntero a una estructura
Employee - Aumente el salario un 15% utilizando el operador flecha
- Incremente los años de servicio en 1
- Imprima
Employee promoted successfully!
- Reciba como parámetro un puntero a una estructura
- En la función main:
- Declare un puntero a una estructura
EmployeellamadoempPtr - Utilice
malloc()para asignar dinámicamente memoria para una estructuraEmployee - Compruebe si la asignación de memoria se realizó correctamente:
- Si
empPtresNULL, imprimaMemory allocation failedy salga del programa - Si se realizó correctamente, imprima
Memory allocated successfully
- Si
- Llame a
fillEmployeeDatapara completar los datos del empleado - Imprima
Initial employee data: - Llame a
displayEmployeepara mostrar la información inicial del empleado - Llame a
promoteEmployeepara ascender al empleado - Imprima
After promotion: - Llame nuevamente a
displayEmployeepara mostrar la información actualizada - Libere la memoria asignada dinámicamente utilizando
free(empPtr) - Imprima
Memory freed successfully
- Declare un puntero a una estructura
Este desafío combina todos los conceptos clave del capítulo: definir estructuras, asignación dinámica de memoria con malloc(), comprobar si la asignación falla, pasar punteros a estructuras a las funciones, utilizar el operador flecha para acceder a los miembros de la estructura y modificarlos, y realizar una limpieza adecuada de la memoria con free(). Las funciones demuestran cómo los punteros permiten modificar directamente los datos de la estructura original.
Pruébalo tú mismo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// TODO: Definir la estructura Employee aquí
// TODO: Implementar la función fillEmployeeData aquí
// TODO: Implementar la función displayEmployee aquí
// TODO: Implementar la función promoteEmployee aquí
int main() {
// TODO: Declarar empPtr y asignar memoria
// TODO: Verificar si la asignación de memoria fue exitosa
// TODO: Llenar los datos del empleado, mostrar los datos iniciales, ascender y mostrar después del ascenso
// TODO: Liberar memoria e imprimir mensaje de éxito
return 0;
}Todas las lecciones de Lógica y Flujo
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones8Estructuras y Punteros
Punteros a estructurasEl operador flecha (->)Pasar estructuras por valorPasar punteros a estructurasAsignación dinámica de estructurasResumen: Modificar estructuras - Ptr3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenasPractica por tu cuenta: Compilador de C online