استخدام 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 بشكل متكرر في أنحاء برنامجك.
التحدي
سهلأنشئ برنامج C يوضّح استخدام typedef مع الهياكل لبناء نظام بسيط لجرد الكتب. يجب أن يقوم برنامجك بما يلي:
- عرّف
structباسمBookمع الأعضاء التالية:- عدد صحيح
id - مصفوفة محارف
titleبحجم 50 - عدد عشري
price - عدد صحيح
quantity
- عدد صحيح
- استخدم
typedefلإنشاء اسم مستعار للنوع باسمBookمن أجلstruct Book - في الدالة
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
- إذا كانت القيمة الإجمالية لـ book1 أعلى: اطبع
- صرّح عن متغيرين من النوع
يوضّح هذا التحدي كيف يزيل استخدام 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;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف7الهياكل (structs)
ما هو الـ Struct؟الإعلان عن Structإنشاء متغيرات Structالوصول إلى أعضاء الـ Structتهيئة الـ Structsمراجعة: Struct بيانات الطالب10Enums و Typedef
enum للثوابت المسماةالتصريح عن Enums واستخدامهااستخدام Enums في جمل Switchاستخدام typedef لأسماء مستعارة للأنواعاستخدام typedef مع Structsمراجعة: تمارين على Typedef و Enum2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسيةتدرّب بنفسك: مترجم C عبر الإنترنت