Fonction pour créer un contact
Fait partie de la section Logique & Flux du Journey C de Coddy. Leçon 51 sur 63.
Défi
FacileEn 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 :
- 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
- Renvoie 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 (renvoie NULL), affiche
Memory allocation failedet renvoie NULL - Si l’allocation réussit, affiche
Contact created successfully
- Si l’allocation échoue (renvoie NULL), affiche
- Initialise tous les membres de la structure avec des valeurs par défaut à l’aide de l’opérateur flèche :
- Définit
namecomme une chaîne vide à l’aide decontactPtr->name[0] = '\0'; - Définit
phonecomme une chaîne vide à l’aide decontactPtr->phone[0] = '\0'; - Définit
emailcomme une chaîne vide à l’aide decontactPtr->email[0] = '\0'; - Définit
ageà 0 à l’aide decontactPtr->age = 0;
- Définit
- Renvoie le pointeur vers le contact nouvellement créé
- Dans la fonction main :
- Déclarer un pointeur vers une structure
ContactnomménewContact - Appeler la fonction
createContactet affecter le pointeur renvoyé ànewContact - Vérifier si la création du contact a réussi :
- Si
newContactvaut NULL, afficherFailed to create contactet quitter le programme - En cas de réussite, afficher
Contact initialized with default values
- Si
- 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
- Déclarer un pointeur vers une structure
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
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 contactEntraînez-vous par vous-même : Compilateur C en ligne