Riepilogo: modifica di una struct - puntatore
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 49 di 63.
Sfida
FacileCrea un programma in C che dimostri un sistema completo di gestione dei dipendenti usando l'allocazione dinamica della memoria, puntatori a struct e funzioni. Il tuo programma deve:
- Definire una
structdenominataEmployeecon i seguenti membri:- Un intero
idper memorizzare l'ID del dipendente - Un array di caratteri
namedi dimensione 50 per memorizzare il nome del dipendente - Un array di caratteri
departmentdi dimensione 30 per memorizzare il nome del reparto - Un float
salaryper memorizzare lo stipendio del dipendente - Un intero
yearsOfServiceper memorizzare gli anni di servizio
- Un intero
- Scrivere una funzione denominata
fillEmployeeDatache:- Accetta come parametro un puntatore a una struct
Employee - Legge le informazioni del dipendente dall'input nel seguente ordine: ID, nome, reparto, stipendio, anni di servizio
- Assegna i valori ai membri della struct usando l'operatore freccia
- Calcola un bonus in base agli anni di servizio: se gli anni >= 5, il bonus è pari al 10% dello stipendio, altrimenti al 5% dello stipendio
- Aggiunge il bonus allo stipendio:
empPtr->salary += bonus;
- Accetta come parametro un puntatore a una struct
- Scrivere una funzione denominata
displayEmployeeche:- Accetta come parametro un puntatore a una struct
Employee - Stampa le informazioni del dipendente in questo formato esatto:
Employee Details:ID: [id]Name: [name]Department: [department]Salary: [salary]Years of Service: [yearsOfService]
- Accetta come parametro un puntatore a una struct
- Scrivere una funzione denominata
promoteEmployeeche:- Accetta come parametro un puntatore a una struct
Employee - Aumenta lo stipendio del 15% usando l'operatore freccia
- Incrementa gli anni di servizio di 1
- Stampa
Employee promoted successfully!
- Accetta come parametro un puntatore a una struct
- Nella funzione main:
- Dichiara un puntatore a una struct
EmployeedenominatoempPtr - Usa
malloc()per allocare dinamicamente la memoria per una structEmployee - Verifica se l'allocazione della memoria è riuscita:
- Se
empPtrèNULL, stampaMemory allocation failede termina il programma - Se è riuscita, stampa
Memory allocated successfully
- Se
- Chiama
fillEmployeeDataper inserire i dati del dipendente - Stampa
Initial employee data: - Chiama
displayEmployeeper mostrare le informazioni iniziali del dipendente - Chiama
promoteEmployeeper promuovere il dipendente - Stampa
After promotion: - Chiama di nuovo
displayEmployeeper mostrare le informazioni aggiornate - Libera la memoria allocata dinamicamente usando
free(empPtr) - Stampa
Memory freed successfully
- Dichiara un puntatore a una struct
Questa sfida combina tutti i concetti chiave del capitolo: definire struct, allocare dinamicamente la memoria con malloc(), verificare gli errori di allocazione, passare puntatori a struct alle funzioni, usare l'operatore freccia per accedere ai membri della struct e modificarli, e liberare correttamente la memoria con free(). Le funzioni dimostrano come i puntatori consentano di modificare direttamente i dati della struct originale.
Provalo tu
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// TODO: Definisci qui la struct Employee
// TODO: Implementa qui la funzione fillEmployeeData
// TODO: Implementa qui la funzione displayEmployee
// TODO: Implementa qui la funzione promoteEmployee
int main() {
// TODO: Dichiara empPtr e alloca la memoria
// TODO: Verifica che l'allocazione della memoria sia riuscita
// TODO: Inserisci i dati del dipendente, visualizza i dati iniziali, promuovi il dipendente e visualizza i dati dopo la promozione
// TODO: Libera la memoria e stampa un messaggio di conferma
return 0;
}Tutte le lezioni di Logica e flusso
1Fondamenti dei puntatori
Che cos’è un puntatore?Dichiarare i puntatoriL’operatore di indirizzo (&)L’operatore di dereferenziazione (*)Puntatori NULLRiepilogo: nozioni di base sui puntatori4Progetto: Utility di testo semplice
Panoramica del progettoConteggio dei caratteri2Puntatori e array
I nomi degli array come puntatoriElementi degli array e puntatoriAritmetica dei puntatoriConfrontare i puntatoriRiepilogo: attraversamento di un array con i puntatori5Puntatori e funzioni
Passaggio per valorePassare puntatori alle funzioniModificare le variabili tramite puntatoriUn esempio classico: scambiare valoriPassare array alle funzioniRiepilogo: argomenti puntatore nelle funzioni8Struct e puntatori
Puntatori a structL’operatore freccia (->)Passare le struct per valorePassare puntatori a structAllocazione dinamica delle structRiepilogo: modifica di una struct - puntatore3Array di caratteri e stringhe
Stringhe come array di charIl terminatore nullInput di stringhe con scanfUso di strlen()Uso di strcpy()Uso di strcat()Uso di strcmp()Riepilogo: funzioni di base per le stringhe6Gestione della memoria
Memoria Stack vs. HeapAllocazione dinamica - malloc()Usare sizeof() per l'allocazioneVerificare il fallimento dell'allocazioneLiberare la memoria con free()Allocare con calloc()Riepilogo: array dinamico9Progetto: Inserimento semplice di un contatto
Progetto: Definire una struct ContattoFunzione per creare un contattoEsercitati da solo: Compilatore C online