الوصول إلى أعضاء الـ Struct
جزء من قسم المنطق وتدفق التنفيذ في رحلة C على Coddy. الدرس 41 من 63.
والآن بعد أن أصبحت قادرًا على إنشاء متغيرات البنية، عليك أن تتعلم كيفية التعامل مع البيانات المخزنة بداخلها. يُعد عامل النقطة (.) مفتاحك للوصول إلى الأعضاء الفرديين لمتغير البنية وتعديلهم.
صياغة الوصول إلى أعضاء البنية مباشرة:
structVariable.memberNameباستخدام مثال البنية Point لدينا، يمكنك قراءة أعضائها وتعديلها:
struct Point p1;
// الكتابة في أعضاء البنية
p1.x = 10;
p1.y = 20;
// القراءة من أعضاء البنية
printf("Point coordinates: (%d, %d)\n", p1.x, p1.y);يعمل عامل النقطة تمامًا مثل الوصول إلى أي متغير آخر؛ يمكنك استخدامه في عمليات الإسناد والعمليات الحسابية واستدعاءات الدوال، أو في أي موضع تستخدم فيه متغيرًا عاديًا من ذلك النوع. يتصرف كل عضو كمتغير مستقل من نوعه المُعلن، ما يتيح لك معالجة بيانات البنية بطريقة منظمة وبديهية.
التحدي
سهلأنشئ برنامجًا بلغة C يوضّح كيفية الوصول إلى أعضاء البنية وتعديلها باستخدام عامل النقطة. يجب أن يقوم برنامجك بما يلي:
- عرّف بنية
structباسمCarتضم الأعضاء التالية:- year لتخزين سنة التصنيع
- مصفوفة محارف
brandبحجم 20 لتخزين ماركة السيارة - عدد صحيح
mileageلتخزين المسافة المقطوعة الحالية - عدد عشري
priceلتخزين سعر السيارة
- أنشئ متغيرًا من النوع
CarباسمmyCar - اقرأ قيم الإدخال التالية وأسندها إلى أعضاء البنية باستخدام عامل النقطة:
- myCar.year
- اقرأ سلسلة نصية للماركة وانسخها إلى
myCar.brandباستخدامstrcpy()(لا يمكن إسناد قيمة إلى مصفوفة باستخدام=) - اقرأ عددًا صحيحًا للمسافة المقطوعة وأسنده إلى
myCar.mileage - اقرأ عددًا عشريًا للسعر وأسنده إلى
myCar.price
- بعد قراءة كل القيم، نفّذ العمليات التالية:
- myCar.mileage += 1000;
- myCar.price -= 500.0;
- اطبع معلومات السيارة باستخدام عامل النقطة للوصول إلى كل عضو، واتبّع هذا التنسيق بالضبط:
Car Details:Year: [year]Brand: [brand]Mileage: [mileage]Price: [price]
يختبر هذا التحدي مدى فهمك لعامل النقطة عند القراءة من أعضاء البنية والكتابة إليها. ستتدرّب على إسناد القيم إلى أعضاء البنية، وإجراء العمليات الحسابية عليها، والوصول إليها لإخراجها.
على سبيل المثال، إذا كان الإدخال:
2020
Toyota
50000
25000.50فيجب أن يكون الإخراج:
Car Details:
Year: 2020
Brand: Toyota
Mileage: 51000
Price: 24500.50جرّب بنفسك
#include <stdio.h>
#include <string.h>
// TODO: عرّف بنية Car هنا
int main() {
// TODO: أنشئ متغيرًا من نوع Car باسم myCar
// اقرأ قيم الإدخال
int year;
char brand[20];
int mileage;
float price;
scanf("%d", &year);
scanf("%s", brand);
scanf("%d", &mileage);
scanf("%f", &price);
// TODO: أسند قيم الإدخال إلى أعضاء البنية باستخدام عامل النقطة
// TODO: عدّل عدد الأميال والسعر كما هو محدد
// TODO: اطبع تفاصيل السيارة باستخدام عامل النقطة
printf("Car Details:\n");
// اطبع Year وBrand وMileage وPrice هنا
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف7الهياكل (structs)
ما هو الـ Struct؟الإعلان عن Structإنشاء متغيرات Structالوصول إلى أعضاء الـ Structتهيئة الـ Structsمراجعة: Struct بيانات الطالب2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسيةتدرّب بنفسك: مترجم C عبر الإنترنت