Funzione per creare un contatto
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 51 di 63.
Sfida
FacilePartendo dalla struct Contact della lezione precedente, crea una funzione che allochi dinamicamente memoria per un nuovo contatto. Il tuo programma dovrà:
- Usare la stessa definizione della struct
Contactdella lezione precedente, con i membri:- Un array di caratteri
namedi dimensione 50 - Un array di caratteri
phonedi dimensione 20 - Un array di caratteri
emaildi dimensione 40 - Un intero
age
- Un array di caratteri
- Scrivere una funzione chiamata
createContactche:- Non accetta parametri
- Restituisce un puntatore a una struct
Contact - Usa
malloc()per allocare dinamicamente memoria per una structContact - Verifica se l'allocazione della memoria è riuscita:
- Se l'allocazione non riesce (restituisce NULL), stampa
Memory allocation failede restituisce NULL - Se l'allocazione riesce, stampa
Contact created successfully
- Se l'allocazione non riesce (restituisce NULL), stampa
- Inizializza tutti i membri della struct ai valori predefiniti usando l'operatore freccia:
- Imposta
namea una stringa vuota usandocontactPtr->name[0] = '\0'; - Imposta
phonea una stringa vuota usandocontactPtr->phone[0] = '\0'; - Imposta
emaila una stringa vuota usandocontactPtr->email[0] = '\0'; - Imposta
agea 0 usandocontactPtr->age = 0;
- Imposta
- Restituisce il puntatore al contatto appena creato
- Nella funzione main:
- Dichiara un puntatore a una struct
ContactchiamatonewContact - Chiama la funzione
createContacte assegna il puntatore restituito anewContact - Verifica se la creazione del contatto è riuscita:
- Se
newContactè NULL, stampaFailed to create contacte termina il programma - Se riesce, stampa
Contact initialized with default values
- Se
- Visualizza le informazioni del contatto inizializzato usando l'operatore freccia, esattamente in questo formato:
Default Contact Values:Name: [name](sarà vuoto)Phone: [phone](sarà vuoto)Email: [email](sarà vuoto)Age: [age](sarà 0)
- Libera la memoria allocata dinamicamente usando
free(newContact) - Stampa
Memory freed successfully
- Dichiara un puntatore a una struct
Questa sfida introduce il concetto di funzioni factory: funzioni che creano e restituiscono puntatori a struct allocate dinamicamente. Ti eserciterai con l'allocazione dinamica della memoria, i controlli degli errori, l'inizializzazione delle struct tramite puntatori e la liberazione della memoria.
Provalo tu
#include <stdio.h>
#include <string.h>
// TODO: Define the Contact struct here
struct Contact {
char name[50];
char phone[20];
char email[40];
int age;
};
int main() {
// TODO: Create a Contact variable named person
struct Contact person;
// Read input values
scanf("%s", person.name);
scanf("%s", person.phone);
scanf("%s", person.email);
scanf("%d", &person.age);
// TODO: Write your validation and output code below
if (person.age < 0 || person.age > 120) {
printf("Invalid age");
return 0;
}
if (strlen(person.phone) < 10) {
printf("Invalid phone number");
return 0;
}
printf("Contact Information:\n");
printf("Name: %s\n", person.name);
printf("Phone: %s\n", person.phone);
printf("Email: %s\n", person.email);
printf("Age: %d\n", person.age);
printf("Name length: %lu\n", strlen(person.name));
if (person.age >= 0 && person.age <= 17) {
printf("Category: Minor");
} else if (person.age >= 18 && person.age <= 64) {
printf("Category: Adult");
} else {
printf("Category: Senior");
}
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 funzioni3Array 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