Recapitulação: Modificando Struct - Ptr
Parte da seção Logic & Flow do Journey de C da Coddy — lição 49 de 63.
Desafio
FácilCrie um programa em C que demonstre um sistema completo de gerenciamento de funcionários usando alocação dinâmica de memória, ponteiros para struct e funções. Seu programa deve:
- Definir uma
structchamadaEmployeecom os seguintes membros:- Um inteiro
idpara armazenar o ID do funcionário - Um array de caracteres
namecom tamanho 50 para armazenar o nome do funcionário - Um array de caracteres
departmentcom tamanho 30 para armazenar o nome do departamento - Um float
salarypara armazenar o salário do funcionário - Um inteiro
yearsOfServicepara armazenar os anos de serviço
- Um inteiro
- Escrever uma função chamada
fillEmployeeDataque:- Recebe um ponteiro para uma struct
Employeecomo parâmetro - Lê as informações do funcionário da entrada nesta ordem: ID, nome, departamento, salário, anos de serviço
- Atribui os valores aos membros da struct usando o operador de seta
- Calcula um bônus baseado nos anos de serviço: se anos >= 5, o bônus é 10% do salário, caso contrário, 5% do salário
- Adiciona o bônus ao salário:
empPtr->salary += bonus;
- Recebe um ponteiro para uma struct
- Escrever uma função chamada
displayEmployeeque:- Recebe um ponteiro para uma struct
Employeecomo parâmetro - Imprime as informações do funcionário exatamente neste formato:
Employee Details:ID: [id]Name: [name]Department: [department]Salary: [salary]Years of Service: [yearsOfService]
- Recebe um ponteiro para uma struct
- Escrever uma função chamada
promoteEmployeeque:- Recebe um ponteiro para uma struct
Employeecomo parâmetro - Aumenta o salário em 15% usando o operador de seta
- Incrementa os anos de serviço em 1
- Imprime
Employee promoted successfully!
- Recebe um ponteiro para uma struct
- Na função main:
- Declarar um ponteiro para uma struct
EmployeechamadoempPtr - Usar
malloc()para alocar dinamicamente memória para uma structEmployee - Verificar se a alocação de memória foi bem-sucedida:
- Se
empPtrforNULL, imprimirMemory allocation failede encerrar o programa - Se for bem-sucedido, imprimir
Memory allocated successfully
- Se
- Chamar
fillEmployeeDatapara preencher os dados do funcionário - Imprimir
Initial employee data: - Chamar
displayEmployeepara mostrar as informações iniciais do funcionário - Chamar
promoteEmployeepara promover o funcionário - Imprimir
After promotion: - Chamar
displayEmployeenovamente para mostrar as informações atualizadas - Liberar a memória alocada dinamicamente usando
free(empPtr) - Imprimir
Memory freed successfully
- Declarar um ponteiro para uma struct
Este desafio combina todos os conceitos-chave do capítulo: definição de structs, alocação dinâmica de memória com malloc(), verificação de falha na alocação, passagem de ponteiros de struct para funções, uso do operador de seta para acessar e modificar membros de struct e a limpeza adequada da memória com free(). As funções demonstram como os ponteiros permitem a modificação direta dos dados originais da struct.
Experimente você mesmo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// TODO: Defina a struct Employee aqui
// TODO: Implemente a função fillEmployeeData aqui
// TODO: Implemente a função displayEmployee aqui
// TODO: Implemente a função promoteEmployee aqui
int main() {
// TODO: Declare empPtr e aloque memória
// TODO: Verifique se a alocação de memória foi bem-sucedida
// TODO: Preencha os dados do funcionário, exiba os dados iniciais, promova e exiba após a promoção
// TODO: Libere a memória e imprima uma mensagem de sucesso
return 0;
}Todas as lições de Logic & Flow
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos8Structs e Ponteiros
Ponteiros para StructsO Operador Seta (->)Passagem de Structs por ValorPassagem de Ponteiros para StructsAlocação Dinâmica de StructsRecapitulação: Modificando Struct - Ptr3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um Contato