Menu
Coddy logo textTech

Funzione per compilare un contatto

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

challenge icon

Sfida

Facile

Partendo 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:

  1. Usare la stessa definizione della struttura Contact delle lezioni precedenti, 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. Usare la stessa funzione createContact della lezione precedente, che:
    • Alloca dinamicamente la memoria per una struttura Contact
    • Inizializza tutti i membri ai valori predefiniti
    • Restituisce un puntatore al contatto
  3. Scrivere una funzione denominata populateContact che:
    • 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 usando scanf("%s", contactPtr->name)
      • Stampa Enter phone: e legge una stringa nel campo del telefono usando scanf("%s", contactPtr->phone)
      • Stampa Enter email: e legge una stringa nel campo dell’email usando scanf("%s", contactPtr->email)
      • Stampa Enter age: e legge un intero nel campo dell’età usando scanf("%d", &contactPtr->age)
    • 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()), stampa Invalid phone number
      • Se tutte le convalide vengono superate, stampa Contact populated successfully
  4. Nella funzione main:
    • Crea un contatto usando la funzione createContact
    • Verifica che la creazione del contatto sia riuscita
    • Chiama la funzione populateContact per 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

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

Esercitati da solo: Compilatore C online