Menu
Coddy logo textTech

Fonction pour créer un contact

Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 51 sur 63.

challenge icon

Défi

Facile

En vous basant sur votre structure Contact de la leçon précédente, créez une fonction qui alloue dynamiquement de la mémoire pour un nouveau contact. Votre programme doit :

  1. Utiliser la même définition de structure Contact que dans la leçon précédente avec les membres suivants :
    • Un tableau de caractères name de taille 50
    • Un tableau de caractères phone de taille 20
    • Un tableau de caractères email de taille 40
    • Un entier age
  2. Écrire une fonction nommée createContact qui :
    • Ne prend aucun paramètre
    • Retourne un pointeur vers une structure Contact
    • Utilise malloc() pour allouer dynamiquement de la mémoire pour une structure Contact
    • Vérifie si l'allocation de mémoire a réussi :
      • Si l'allocation échoue (retourne NULL), affiche Memory allocation failed et retourne NULL
      • Si l'allocation réussit, affiche Contact created successfully
    • Initialise tous les membres de la structure avec des valeurs par défaut en utilisant l'opérateur flèche :
      • Définit name comme une chaîne vide en utilisant contactPtr->name[0] = '\0';
      • Définit phone comme une chaîne vide en utilisant contactPtr->phone[0] = '\0';
      • Définit email comme une chaîne vide en utilisant contactPtr->email[0] = '\0';
      • Définit age à 0 en utilisant contactPtr->age = 0;
    • Retourne le pointeur vers le contact nouvellement créé
  3. Dans la fonction principale (main) :
    • Déclarer un pointeur vers une structure Contact nommé newContact
    • Appeler la fonction createContact et assigner le pointeur retourné à newContact
    • Vérifier si la création du contact a réussi :
      • Si newContact est NULL, afficher Failed to create contact et quitter le programme
      • En cas de succès, afficher Contact initialized with default values
    • Afficher les informations du contact initialisé en utilisant l'opérateur flèche dans ce format exact :
      • Default Contact Values:
      • Name: [name] (sera vide)
      • Phone: [phone] (sera vide)
      • Email: [email] (sera vide)
      • Age: [age] (sera 0)
    • Libérer la mémoire allouée dynamiquement en utilisant free(newContact)
    • Afficher Memory freed successfully

Ce défi introduit le concept de fonctions d'usine (factory functions) - des fonctions qui créent et retournent des pointeurs vers des structures allouées dynamiquement. Vous pratiquerez l'allocation dynamique de mémoire, la vérification appropriée des erreurs, l'initialisation de structures via des pointeurs et la libération de la mémoire.

Essayez vous-même

#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;
}

Toutes les leçons de Logic & Flow