Menu
Coddy logo textTech

Funzione per creare un contatto

Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 51 di 63.

challenge icon

Sfida

Facile

Partendo dalla struct Contact della lezione precedente, crea una funzione che allochi dinamicamente memoria per un nuovo contatto. Il tuo programma dovrà:

  1. Usare la stessa definizione della struct Contact della lezione precedente, con i membri:
    • Un array di caratteri name di dimensione 50
    • Un array di caratteri phone di dimensione 20
    • Un array di caratteri email di dimensione 40
    • Un intero age
  2. Scrivere una funzione chiamata createContact che:
    • Non accetta parametri
    • Restituisce un puntatore a una struct Contact
    • Usa malloc() per allocare dinamicamente memoria per una struct Contact
    • Verifica se l'allocazione della memoria è riuscita:
      • Se l'allocazione non riesce (restituisce NULL), stampa Memory allocation failed e restituisce NULL
      • Se l'allocazione riesce, stampa Contact created successfully
    • Inizializza tutti i membri della struct ai valori predefiniti usando l'operatore freccia:
      • Imposta name a una stringa vuota usando contactPtr->name[0] = '\0';
      • Imposta phone a una stringa vuota usando contactPtr->phone[0] = '\0';
      • Imposta email a una stringa vuota usando contactPtr->email[0] = '\0';
      • Imposta age a 0 usando contactPtr->age = 0;
    • Restituisce il puntatore al contatto appena creato
  3. Nella funzione main:
    • Dichiara un puntatore a una struct Contact chiamato newContact
    • Chiama la funzione createContact e assegna il puntatore restituito a newContact
    • Verifica se la creazione del contatto è riuscita:
      • Se newContact è NULL, stampa Failed to create contact e termina il programma
      • Se riesce, stampa Contact initialized with default values
    • 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

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

Esercitati da solo: Compilatore C online