Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دالة لإنشاء جهة اتصال

جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 51 من 63.

challenge icon

التحدي

سهل

بناءً على هيكل Contact من الدرس السابق، قم بإنشاء دالة تخصص ذاكرة ديناميكية لجهة اتصال جديدة. يجب أن يقوم برنامجك بما يلي:

  1. استخدام نفس تعريف هيكل Contact من الدرس السابق مع الأعضاء التالية:
    • مصفوفة أحرف name بحجم 50
    • مصفوفة أحرف phone بحجم 20
    • مصفوفة أحرف email بحجم 40
    • عدد صحيح age
  2. كتابة دالة باسم createContact تقوم بما يلي:
    • لا تأخذ أي معاملات
    • تعيد مؤشراً (pointer) إلى هيكل Contact
    • تستخدم malloc() لتخصيص ذاكرة ديناميكية لهيكل Contact واحد
    • تتحقق مما إذا كان تخصيص الذاكرة ناجحاً:
      • إذا فشل التخصيص (أعاد NULL)، تطبع Memory allocation failed وتعيد NULL
      • إذا نجح التخصيص، تطبع Contact created successfully
    • تهيئ جميع أعضاء الهيكل إلى قيم افتراضية باستخدام عامل السهم (arrow operator):
      • تضبط name إلى سلسلة نصية فارغة باستخدام contactPtr->name[0] = '\0';
      • تضبط phone إلى سلسلة نصية فارغة باستخدام contactPtr->phone[0] = '\0';
      • تضبط email إلى سلسلة نصية فارغة باستخدام contactPtr->email[0] = '\0';
      • تضبط age إلى 0 باستخدام contactPtr->age = 0;
    • تعيد المؤشر إلى جهة الاتصال التي تم إنشاؤها حديثاً
  3. في الدالة الرئيسية (main function):
    • الإعلان عن مؤشر لهيكل Contact باسم newContact
    • استدعاء دالة createContact وتعيين المؤشر المعاد إلى newContact
    • التحقق مما إذا كان إنشاء جهة الاتصال ناجحاً:
      • إذا كان newContact هو NULL، اطبع Failed to create contact واخرج من البرنامج
      • إذا كان ناجحاً، اطبع Contact initialized with default values
    • عرض معلومات جهة الاتصال التي تمت تهيئتها باستخدام عامل السهم بهذا التنسيق الدقيق:
      • Default Contact Values:
      • Name: [name] (سيكون فارغاً)
      • Phone: [phone] (سيكون فارغاً)
      • Email: [email] (سيكون فارغاً)
      • Age: [age] (سيكون 0)
    • تحرير الذاكرة المخصصة ديناميكياً باستخدام free(newContact)
    • طباعة Memory freed successfully

يقدم هذا التحدي مفهوم دوال المصنع (factory functions) - وهي الدوال التي تنشئ وتعيد مؤشرات لهياكل مخصصة ديناميكياً. ستتدرب على تخصيص الذاكرة الديناميكية، والتحقق الصحيح من الأخطاء، وتهيئة الهياكل من خلال المؤشرات، وتنظيف الذاكرة.

جرّب بنفسك

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

جميع دروس Logic & Flow