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

تدرّب بنفسك: مترجم C عبر الإنترنت