Menu
Coddy logo textTech

Fonction pour créer un contact

Fait partie de la section Logique & Flux du Journey C de Coddy. Leçon 51 sur 63.

challenge icon

Défi

Facile

En vous appuyant 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
    • Renvoie 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 (renvoie NULL), affiche Memory allocation failed et renvoie NULL
      • Si l’allocation réussit, affiche Contact created successfully
    • Initialise tous les membres de la structure avec des valeurs par défaut à l’aide de l’opérateur flèche :
      • Définit name comme une chaîne vide à l’aide de contactPtr->name[0] = '\0';
      • Définit phone comme une chaîne vide à l’aide de contactPtr->phone[0] = '\0';
      • Définit email comme une chaîne vide à l’aide de contactPtr->email[0] = '\0';
      • Définit age à 0 à l’aide de contactPtr->age = 0;
    • Renvoie le pointeur vers le contact nouvellement créé
  3. Dans la fonction main :
    • Déclarer un pointeur vers une structure Contact nommé newContact
    • Appeler la fonction createContact et affecter le pointeur renvoyé à newContact
    • Vérifier si la création du contact a réussi :
      • Si newContact vaut NULL, afficher Failed to create contact et quitter le programme
      • En cas de réussite, afficher Contact initialized with default values
    • Afficher les informations du contact initialisé à l’aide de 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 égal à 0)
    • Libérer la mémoire allouée dynamiquement à l’aide de free(newContact)
    • Afficher Memory freed successfully

Ce défi présente le concept des fonctions de fabrique : des fonctions qui créent et renvoient des pointeurs vers des structures allouées dynamiquement. Vous vous exercerez à l’allocation dynamique de mémoire, à la vérification correcte des erreurs, à l’initialisation de structures par l’intermédiaire de pointeurs et au nettoyage 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 Logique & Flux

Entraînez-vous par vous-même : Compilateur C en ligne