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

استخدام typedef مع Structs

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

من أكثر الاستخدامات العملية لـ typedef إنشاء أسماء مستعارة لأنواع struct. يلغي هذا الحاجة إلى كتابة الكلمة المفتاحية struct بشكل متكرر في كل مرة تعلن فيها عن متغير من ذلك النوع، مما يجعل شفرتك أكثر نظافة وأسهل قراءة.

عند دمج typedef مع تعريف struct، يمكنك إنشاء اسم نوع جديد يشير مباشرةً إلى البنية. إليك الصيغة:

typedef struct Point {
    int x;
    int y;
} Point;

الآن، بدلًا من كتابة struct Point p1; في كل مرة تحتاج فيها إلى متغير من النوع Point، يمكنك ببساطة كتابة Point p1;. ينجز كلا التصريحين الشيء نفسه تمامًا، لكن إصدار typedef أكثر اختصارًا وأسهل قراءة.

يُعد هذا النهج ذا قيمة خاصة في البرامج الأكبر حجمًا، حيث تتعامل بشكل متكرر مع أنواع بيانات مخصصة. فهو يجعل شيفرتك تبدو أشبه بشيفرة لغات البرمجة الأخرى، ويقلل من الفوضى البصرية الناتجة عن كتابة struct بشكل متكرر في أنحاء برنامجك.

challenge icon

التحدي

سهل

أنشئ برنامج C يوضّح استخدام typedef مع الهياكل لبناء نظام بسيط لجرد الكتب. يجب أن يقوم برنامجك بما يلي:

  1. عرّف struct باسم Book مع الأعضاء التالية:
    • عدد صحيح id
    • مصفوفة محارف title بحجم 50
    • عدد عشري price
    • عدد صحيح quantity
  2. استخدم typedef لإنشاء اسم مستعار للنوع باسم Book من أجل struct Book
  3. في الدالة main:
    • صرّح عن متغيرين من النوع Book باسمَي book1 وbook2
    • اقرأ مدخلات الكتاب الأول بهذا الترتيب: المعرّف، العنوان، السعر، الكمية
    • أسند هذه القيم إلى أعضاء book1
    • اقرأ مدخلات الكتاب الثاني بهذا الترتيب: المعرّف، العنوان، السعر، الكمية
    • أسند هذه القيم إلى أعضاء book2
    • اطبع المعلومات الخاصة بكلا الكتابين بهذا التنسيق الدقيق:
      • Book 1: ID=[id], Title=[title], Price=[price], Quantity=[quantity]
      • Book 2: ID=[id], Title=[title], Price=[price], Quantity=[quantity]
    • احسب واطبع القيمة الإجمالية لجرد كل كتاب (السعر × الكمية) بهذا التنسيق الدقيق:
      • Book 1 Total Value: [total_value]
      • Book 2 Total Value: [total_value]
    • احسب واطبع قيمة الجرد المجمعة للكتابين بهذا التنسيق الدقيق: Combined Inventory Value: [combined_value]
    • حدّد واطبع الكتاب الذي يملك القيمة الإجمالية الأعلى:
      • إذا كانت القيمة الإجمالية لـ book1 أعلى: اطبع Book 1 has higher value
      • إذا كانت القيمة الإجمالية لـ book2 أعلى: اطبع Book 2 has higher value
      • إذا كانت لهما القيمة نفسها: اطبع Both books have equal value

يوضّح هذا التحدي كيف يزيل استخدام typedef مع الهياكل الحاجة إلى كتابة struct Book بشكل متكرر في أنحاء برنامجك. وبدلاً من التصريح عن المتغيرات بصيغة struct Book book1;، يمكنك ببساطة كتابة Book book1;، مما يجعل شيفرتك أكثر وضوحًا وأسهل قراءة. ستتدرّب على الجمع بين تعريف الهيكل وtypedef، والعمل مع أعضاء الهيكل، وإجراء العمليات الحسابية باستخدام بيانات الهيكل.

جرّب بنفسك

#include <stdio.h>
#include <string.h>

// TODO: عرّف الـ struct والـ typedef الخاص بك هنا

int main() {
    // TODO: صرّح عن متغيرات Book الخاصة بك هنا
    
    // اقرأ الإدخال للكتاب الأول
    int id1, quantity1;
    char title1[50];
    float price1;
    
    scanf("%d", &id1);
    scanf("%s", title1);
    scanf("%f", &price1);
    scanf("%d", &quantity1);
    
    // TODO: عيّن القيم لأعضاء book1
    
    // اقرأ الإدخال للكتاب الثاني
    int id2, quantity2;
    char title2[50];
    float price2;
    
    scanf("%d", &id2);
    scanf("%s", title2);
    scanf("%f", &price2);
    scanf("%d", &quantity2);
    
    // TODO: عيّن القيم لأعضاء book2
    
    // TODO: اطبع معلومات الكتاب، واحسب القيم، وقارن
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow

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