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

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

جزء من قسم المنطق وتدفق التنفيذ في رحلة C على Coddy. الدرس 51 من 63.

challenge icon

التحدي

سهل

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

  1. استخدم تعريف بنية Contact نفسه من الدرس السابق، مع الأعضاء التالية:
    • مصفوفة محارف name بحجم 50
    • مصفوفة محارف phone بحجم 20
    • مصفوفة محارف email بحجم 40
    • عدد صحيح age
  2. اكتب دالة باسم createContact تقوم بما يلي:
    • لا تأخذ أي معاملات
    • تعيد مؤشرًا إلى بنية Contact
    • تستخدم malloc() لتخصيص الذاكرة ديناميكيًا لبنية Contact واحدة
    • تتحقق مما إذا كان تخصيص الذاكرة قد نجح:
      • إذا فشل التخصيص (وأعاد NULL)، اطبع Memory allocation failed وأعد NULL
      • إذا نجح التخصيص، اطبع Contact created successfully
    • تهيّئ جميع أعضاء البنية إلى القيم الافتراضية باستخدام معامل السهم:
      • اضبط name على سلسلة فارغة باستخدام contactPtr->name[0] = '\0';
      • اضبط phone على سلسلة فارغة باستخدام contactPtr->phone[0] = '\0';
      • اضبط email على سلسلة فارغة باستخدام contactPtr->email[0] = '\0';
      • اضبط age على 0 باستخدام contactPtr->age = 0;
    • أعد المؤشر إلى جهة الاتصال التي أُنشئت حديثًا
  3. في الدالة main:
    • صرّح عن مؤشر إلى بنية 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

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

جرّب بنفسك

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

جميع دروس المنطق وتدفق التنفيذ

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