التصريح عن Enums واستخدامها
جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 56 من 63.
الآن بعد أن قمت بتعريف enum، يمكنك إنشاء متغيرات من نوع enum هذا وتعيين قيم ذات معنى لها. هذا هو المكان الذي تتألق فيه الـ enums حقًا - فبدلاً من التعامل مع أرقام محيرة، يمكنك استخدام أسماء وصفية.
للتصريح عن متغير من نوع enum، تستخدم نفس الصيغة المستخدمة للتصريح عن أي متغير آخر:
enum DayOfWeek today;
enum DayOfWeek weekend_day;يمكنك بعد ذلك تعيين قيم لهذه المتغيرات باستخدام الثوابت المسماة من التعداد (enum) الخاص بك:
today = WEDNESDAY;
weekend_day = SATURDAY;قارن هذا باستخدام الأرقام الخام: today = 2; و weekend_day = 5;. تخبرك نسخة التعداد (enum) فوراً باليوم الذي تعمل معه، بينما تتطلب منك الأرقام تذكر ما يمثله كل قيمة. هذا يجعل الكود الخاص بك أكثر قابلية للقراءة وأقل عرضة للأخطاء.
التحدي
سهلقم بإنشاء برنامج بلغة C يوضح كيفية التصريح عن متغيرات enum واستخدامها لنظام إدارة مهام بسيط. يجب أن يقوم برنامجك بما يلي:
- تعريف
enumباسمTaskStatusمع الثوابت التالية بهذا الترتيب تماماً:PENDINGIN_PROGRESSCOMPLETEDCANCELLED
- في الدالة الرئيسية (main function):
- التصريح عن ثلاثة متغيرات من نوع
enum TaskStatusباسمtask1وtask2وtask3 - قراءة ثلاثة أعداد صحيحة من المدخلات تمثل حالة كل مهمة (0، 1، 2، أو 3)
- تعيين قيم enum المقابلة لكل متغير مهمة بناءً على المدخلات:
- إذا كانت المدخلات 0، قم بتعيين
PENDING - إذا كانت المدخلات 1، قم بتعيين
IN_PROGRESS - إذا كانت المدخلات 2، قم بتعيين
COMPLETED - إذا كانت المدخلات 3، قم بتعيين
CANCELLED
- إذا كانت المدخلات 0، قم بتعيين
- طباعة حالة كل مهمة باستخدام قيم enum بهذا التنسيق تماماً:
Task 1 status: [numeric_value]Task 2 status: [numeric_value]Task 3 status: [numeric_value]
- عد وطباعة عدد المهام في كل فئة حالة:
Pending tasks: [count]In progress tasks: [count]Completed tasks: [count]Cancelled tasks: [count]
- حساب وطباعة العدد الإجمالي للمهام النشطة (المهام التي تكون إما
PENDINGأوIN_PROGRESS) بهذا التنسيق تماماً:Active tasks: [count]
- التصريح عن ثلاثة متغيرات من نوع
يوضح هذا التحدي كيف تجعل متغيرات enum الكود أكثر قابلية للقراءة باستخدام أسماء ذات معنى بدلاً من الأرقام الخام. ستتدرب على التصريح عن متغيرات enum، وتعيين قيم enum بناءً على المدخلات، واستخدام ثوابت enum في المقارنات، وإجراء الحسابات باستخدام قيم enum.
ورقة مرجعية
للإعلان عن متغيرات من نوع enum، استخدم نفس الصيغة المستخدمة للإعلان عن أي متغير آخر:
enum DayOfWeek today;
enum DayOfWeek weekend_day;قم بتعيين قيم لمتغيرات enum باستخدام الثوابت المسماة من الـ enum الخاص بك:
today = WEDNESDAY;
weekend_day = SATURDAY;استخدام أسماء enum بدلاً من الأرقام الخام يجعل الكود أكثر قابلية للقراءة وأقل عرضة للأخطاء. قارن today = WEDNESDAY; بـ today = 2; - نسخة الـ enum توضح على الفور اليوم الذي تتعامل معه.
جرّب بنفسك
#include <stdio.h>
// TODO: قم بتعريف التعداد TaskStatus هنا
int main() {
// قراءة المدخلات لثلاث حالات للمهام
int status1, status2, status3;
scanf("%d", &status1);
scanf("%d", &status2);
scanf("%d", &status3);
// TODO: قم بالتصريح عن ثلاثة متغيرات من نوع التعداد TaskStatus (task1، task2، task3)
// TODO: تعيين قيم التعداد بناءً على المدخلات
// TODO: طباعة حالات المهام
// TODO: عد المهام في كل فئة
// 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()مراجعة: دوال السلاسل النصية الأساسية