Fonction pour créer un contact
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 51 sur 63.
Défi
FacileEn 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 :
- Utiliser la même définition de structure
Contactque dans la leçon précédente avec les membres suivants :- Un tableau de caractères
namede taille 50 - Un tableau de caractères
phonede taille 20 - Un tableau de caractères
emailde taille 40 - Un entier
age
- Un tableau de caractères
- Écrire une fonction nommée
createContactqui :- Ne prend aucun paramètre
- Retourne un pointeur vers une structure
Contact - Utilise
malloc()pour allouer dynamiquement de la mémoire pour une structureContact - Vérifie si l'allocation de mémoire a réussi :
- Si l'allocation échoue (retourne NULL), affiche
Memory allocation failedet retourne NULL - Si l'allocation réussit, affiche
Contact created successfully
- Si l'allocation échoue (retourne NULL), affiche
- Initialise tous les membres de la structure avec des valeurs par défaut en utilisant l'opérateur flèche :
- Définit
namecomme une chaîne vide en utilisantcontactPtr->name[0] = '\0'; - Définit
phonecomme une chaîne vide en utilisantcontactPtr->phone[0] = '\0'; - Définit
emailcomme une chaîne vide en utilisantcontactPtr->email[0] = '\0'; - Définit
ageà 0 en utilisantcontactPtr->age = 0;
- Définit
- Retourne le pointeur vers le contact nouvellement créé
- Dans la fonction principale (main) :
- Déclarer un pointeur vers une structure
ContactnomménewContact - Appeler la fonction
createContactet assigner le pointeur retourné ànewContact - Vérifier si la création du contact a réussi :
- Si
newContactest NULL, afficherFailed to create contactet quitter le programme - En cas de succès, afficher
Contact initialized with default values
- Si
- 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
- Déclarer un pointeur vers une structure
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
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînes6Gestion de la mémoire
Mémoire Pile vs TasAllocation dynamique - malloc()Utiliser sizeof() pour l'allocationVérifier l'échec de l'allocationLibérer la mémoire avec free()Allouer avec calloc()Récapitulatif : Tableaux dynamiques9Projet : Saisie de contact simple
Projet : Définir la structure ContactFonction pour créer un contact