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

دالة لتعبئة بيانات جهة اتصال

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

challenge icon

التحدي

سهل

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

  1. استخدم نفس تعريف هيكل Contact من الدروس السابقة مع الأعضاء التالية:
    • مصفوفة أحرف name بحجم 50
    • مصفوفة أحرف phone بحجم 20
    • مصفوفة أحرف email بحجم 40
    • عدد صحيح age
  2. استخدم نفس وظيفة createContact من الدرس السابق التي تقوم بـ:
    • تخصيص الذاكرة ديناميكيًا لهيكل Contact
    • تهيئة جميع الأعضاء للقيم الافتراضية
    • إرجاع مؤشر (pointer) إلى جهة الاتصال
  3. اكتب وظيفة تسمى populateContact تقوم بـ:
    • تأخذ مؤشرًا إلى هيكل Contact كمعامل لها
    • لا تعيد شيئًا (void)
    • تطلب من المستخدم إدخال البيانات وتقرأها بالترتيب الدقيق التالي:
      • تطبع Enter name: وتقرأ سلسلة نصية في حقل الاسم باستخدام scanf("%s", contactPtr->name)
      • تطبع Enter phone: وتقرأ سلسلة نصية في حقل الهاتف باستخدام scanf("%s", contactPtr->phone)
      • تطبع Enter email: وتقرأ سلسلة نصية في حقل البريد الإلكتروني باستخدام scanf("%s", contactPtr->email)
      • تطبع Enter age: وتقرأ عددًا صحيحًا في حقل العمر باستخدام scanf("%d", &contactPtr->age)
    • بعد قراءة جميع المدخلات، تتحقق من صحة البيانات:
      • إذا كان العمر أقل من 0 أو أكبر من 120، تطبع Invalid age entered
      • إذا كان طول رقم الهاتف أقل من 10 أحرف (استخدم strlen())، تطبع Invalid phone number
      • إذا اجتازت جميع عمليات التحقق، تطبع Contact populated successfully
  4. في الوظيفة الرئيسية (main function):
    • أنشئ جهة اتصال باستخدام وظيفة createContact
    • تحقق مما إذا كان إنشاء جهة الاتصال ناجحًا
    • استدعِ وظيفة populateContact لملء بيانات جهة الاتصال
    • بعد الملء، اعرض معلومات جهة الاتصال باستخدام عامل السهم (arrow operator) بهذا التنسيق الدقيق:
      • Contact Information:
      • Name: [name]
      • Phone: [phone]
      • Email: [email]
      • Age: [age]
    • قم بتحرير الذاكرة المخصصة ديناميكيًا
    • اطبع Contact deleted successfully

يوضح هذا التحدي كيفية إنشاء وظائف تعدل بيانات الهيكل (struct) من خلال المؤشرات. تستقبل وظيفة populateContact مؤشرًا لجهة الاتصال وتستخدم عامل السهم لتعديل أعضاء الهيكل الأصلي مباشرةً. ستتدرب على التعامل مع مدخلات المستخدم، والتحقق من صحة البيانات، والعمل مع الهياكل المخصصة ديناميكيًا من خلال معاملات الوظائف.

جرّب بنفسك

#include <stdio.h>
#include <stdlib.h>

struct Contact {
    char name[50];
    char phone[20];
    char email[40];
    int age;
};

struct Contact* createContact() {
    struct Contact* contactPtr = (struct Contact*)malloc(sizeof(struct Contact));
    
    if (contactPtr == NULL) {
        printf("Memory allocation failed\n");
        return NULL;
    }
    
    printf("Contact created successfully\n");
    
    contactPtr->name[0] = '\0';
    contactPtr->phone[0] = '\0';
    contactPtr->email[0] = '\0';
    contactPtr->age = 0;
    
    return contactPtr;
}

int main() {
    struct Contact* newContact;
    
    newContact = createContact();
    
    if (newContact == NULL) {
        printf("Failed to create contact\n");
        return 1;
    }
    
    printf("Contact initialized with default values\n");
    
    printf("Default Contact Values:\n");
    printf("Name: %s\n", newContact->name);
    printf("Phone: %s\n", newContact->phone);
    printf("Email: %s\n", newContact->email);
    printf("Age: %d\n", newContact->age);
    
    free(newContact);
    printf("Memory freed successfully\n");
    
    return 0;
}

جميع دروس Logic & Flow