Funzione per compilare un contatto
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 52 di 63.
Sfida
FacilePartendo dalla funzione di creazione dei contatti della lezione precedente, crea una funzione che popola un contatto con i dati inseriti dall’utente. Il programma deve:
- Usare la stessa definizione della struttura
Contactdelle lezioni precedenti, 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
- Usare la stessa funzione
createContactdella lezione precedente, che:- Alloca dinamicamente la memoria per una struttura
Contact - Inizializza tutti i membri ai valori predefiniti
- Restituisce un puntatore al contatto
- Alloca dinamicamente la memoria per una struttura
- Scrivere una funzione denominata
populateContactche:- Accetta come parametro un puntatore a una struttura
Contact - Non restituisce nulla (void)
- Richiede l’input dell’utente e legge i dati seguenti in quest’ordine esatto:
- Stampa
Enter name:e legge una stringa nel campo del nome usandoscanf("%s", contactPtr->name) - Stampa
Enter phone:e legge una stringa nel campo del telefono usandoscanf("%s", contactPtr->phone) - Stampa
Enter email:e legge una stringa nel campo dell’email usandoscanf("%s", contactPtr->email) - Stampa
Enter age:e legge un intero nel campo dell’età usandoscanf("%d", &contactPtr->age)
- Stampa
- Dopo aver letto tutti i dati, li convalida:
- Se l’età è minore di 0 o maggiore di 120, stampa
Invalid age entered - Se la lunghezza del numero di telefono è inferiore a 10 caratteri (usa
strlen()), stampaInvalid phone number - Se tutte le convalide vengono superate, stampa
Contact populated successfully
- Se l’età è minore di 0 o maggiore di 120, stampa
- Accetta come parametro un puntatore a una struttura
- Nella funzione main:
- Crea un contatto usando la funzione
createContact - Verifica che la creazione del contatto sia riuscita
- Chiama la funzione
populateContactper inserire i dati del contatto - Dopo averlo popolato, mostra le informazioni del contatto usando l’operatore freccia in questo formato esatto:
Contact Information:Name: [name]Phone: [phone]Email: [email]Age: [age]
- Libera la memoria allocata dinamicamente
- Stampa
Contact deleted successfully
- Crea un contatto usando la funzione
Questa sfida mostra come creare funzioni che modificano i dati di una struttura tramite puntatori. La funzione populateContact riceve un puntatore al contatto e usa l’operatore freccia per modificare direttamente i membri della struttura originale. Farai pratica con la gestione dell’input dell’utente, la convalida dei dati e l’uso di strutture allocate dinamicamente tramite i parametri delle funzioni.
Provalo tu
#include <stdio.h>
#include <stdlib.h>
struct Contact {
char name[50];
char phone[20];
char email[40];
int age;
};
struct Contact* createContact() {
struct Contact* contactPtr = (struct Contact*)malloc(sizeof(struct Contact));
if (contactPtr == NULL) {
printf("Memory allocation failed\n");
return NULL;
}
printf("Contact created successfully\n");
contactPtr->name[0] = '\0';
contactPtr->phone[0] = '\0';
contactPtr->email[0] = '\0';
contactPtr->age = 0;
return contactPtr;
}
int main() {
struct Contact* newContact;
newContact = createContact();
if (newContact == NULL) {
printf("Failed to create contact\n");
return 1;
}
printf("Contact initialized with default values\n");
printf("Default Contact Values:\n");
printf("Name: %s\n", newContact->name);
printf("Phone: %s\n", newContact->phone);
printf("Email: %s\n", newContact->email);
printf("Age: %d\n", newContact->age);
free(newContact);
printf("Memory freed successfully\n");
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