Resumen: Modificar estructuras - Ptr
Parte de la sección Logic & Flow 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 un
structllamadoEmployeecon los siguientes miembros:- Un entero
idpara almacenar el ID del empleado - Un arreglo de caracteres
namecon tamaño 50 para almacenar el nombre del empleado - Un arreglo de caracteres
departmentcon tamaño 30 para almacenar el nombre del departamento - Un float
salarypara almacenar el salario del empleado - Un entero
yearsOfServicepara almacenar los años de servicio
- Un entero
- Escribir una función llamada
fillEmployeeDataque:- Reciba un puntero a una estructura
Employeecomo parámetro - 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 basado en los años de servicio: si los años son >= 5, el bono es el 10% del salario, de lo contrario es el 5% del salario
- Sume el bono al salario:
empPtr->salary += bonus;
- Reciba un puntero a una estructura
- Escribir una función llamada
displayEmployeeque:- Reciba un puntero a una estructura
Employeecomo parámetro - 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 un puntero a una estructura
- Escribir una función llamada
promoteEmployeeque:- Reciba un puntero a una estructura
Employeecomo parámetro - Incremente el salario en un 15% utilizando el operador flecha
- Incremente los años de servicio en 1
- Imprima
Employee promoted successfully!
- Reciba un puntero a una estructura
- En la función principal (main):
- Declare un puntero a una estructura
EmployeellamadoempPtr - Use
malloc()para asignar memoria dinámicamente para una estructuraEmployee - Verifique si la asignación de memoria fue exitosa:
- Si
empPtresNULL, imprimaMemory allocation failedy finalice el programa - Si tiene éxito, 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 promover al empleado - Imprima
After promotion: - Llame a
displayEmployeenuevamente para mostrar la información actualizada - Libere la memoria asignada dinámicamente usando
free(empPtr) - Imprima
Memory freed successfully
- Declare un puntero a una estructura
Este desafío combina todos los conceptos clave del capítulo: definición de estructuras, asignación dinámica de memoria con malloc(), verificación de fallos en la asignación, paso de punteros de estructuras a funciones, uso del operador flecha para acceder y modificar miembros de la estructura, y la limpieza adecuada de la memoria con free(). Las funciones demuestran cómo los punteros permiten la modificación directa de 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 Logic & Flow
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 cadenas