دالة لإنشاء جهة اتصال
جزء من قسم المنطق وتدفق التنفيذ في رحلة C على Coddy. الدرس 51 من 63.
التحدي
سهلاستنادًا إلى بنية Contact من الدرس السابق، أنشئ دالة تخصّص الذاكرة ديناميكيًا لجهة اتصال جديدة. يجب أن يقوم برنامجك بما يلي:
- استخدم تعريف بنية
Contactنفسه من الدرس السابق، مع الأعضاء التالية:- مصفوفة محارف
nameبحجم 50 - مصفوفة محارف
phoneبحجم 20 - مصفوفة محارف
emailبحجم 40 - عدد صحيح
age
- مصفوفة محارف
- اكتب دالة باسم
createContactتقوم بما يلي:- لا تأخذ أي معاملات
- تعيد مؤشرًا إلى بنية
Contact - تستخدم
malloc()لتخصيص الذاكرة ديناميكيًا لبنيةContactواحدة - تتحقق مما إذا كان تخصيص الذاكرة قد نجح:
- إذا فشل التخصيص (وأعاد NULL)، اطبع
Memory allocation failedوأعد NULL - إذا نجح التخصيص، اطبع
Contact created successfully
- إذا فشل التخصيص (وأعاد NULL)، اطبع
- تهيّئ جميع أعضاء البنية إلى القيم الافتراضية باستخدام معامل السهم:
- اضبط
nameعلى سلسلة فارغة باستخدامcontactPtr->name[0] = '\0'; - اضبط
phoneعلى سلسلة فارغة باستخدامcontactPtr->phone[0] = '\0'; - اضبط
emailعلى سلسلة فارغة باستخدامcontactPtr->email[0] = '\0'; - اضبط
ageعلى 0 باستخدامcontactPtr->age = 0;
- اضبط
- أعد المؤشر إلى جهة الاتصال التي أُنشئت حديثًا
- في الدالة main:
- صرّح عن مؤشر إلى بنية
ContactباسمnewContact - استدعِ الدالة
createContactوأسند المؤشر المُعاد إلىnewContact - تحقق مما إذا كان إنشاء جهة الاتصال قد نجح:
- إذا كانت قيمة
newContactتساوي NULL، اطبعFailed to create contactوأنهِ البرنامج - إذا نجح الإنشاء، اطبع
Contact initialized with default values
- إذا كانت قيمة
- اعرض معلومات جهة الاتصال المهيّأة باستخدام معامل السهم بالتنسيق الدقيق التالي:
Default Contact Values:Name: [name](ستكون فارغة)Phone: [phone](ستكون فارغة)Email: [email](ستكون فارغة)Age: [age](ستكون 0)
- حرّر الذاكرة المخصّصة ديناميكيًا باستخدام
free(newContact) - اطبع
Memory freed successfully
- صرّح عن مؤشر إلى بنية
يقدّم هذا التحدي مفهوم دوال المصنع — وهي دوال تنشئ مؤشرات إلى بنيات مخصّصة ديناميكيًا وتعيدها. ستتدرّب على تخصيص الذاكرة ديناميكيًا، والتحقق الصحيح من الأخطاء، وتهيئة البنى من خلال المؤشرات، وتنظيف الذاكرة.
جرّب بنفسك
#include <stdio.h>
#include <string.h>
// TODO: Define the Contact struct here
struct Contact {
char name[50];
char phone[20];
char email[40];
int age;
};
int main() {
// TODO: Create a Contact variable named person
struct Contact person;
// Read input values
scanf("%s", person.name);
scanf("%s", person.phone);
scanf("%s", person.email);
scanf("%d", &person.age);
// TODO: Write your validation and output code below
if (person.age < 0 || person.age > 120) {
printf("Invalid age");
return 0;
}
if (strlen(person.phone) < 10) {
printf("Invalid phone number");
return 0;
}
printf("Contact Information:\n");
printf("Name: %s\n", person.name);
printf("Phone: %s\n", person.phone);
printf("Email: %s\n", person.email);
printf("Age: %d\n", person.age);
printf("Name length: %lu\n", strlen(person.name));
if (person.age >= 0 && person.age <= 17) {
printf("Category: Minor");
} else if (person.age >= 18 && person.age <= 64) {
printf("Category: Adult");
} else {
printf("Category: Senior");
}
return 0;
}جميع دروس المنطق وتدفق التنفيذ
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسية6إدارة الذاكرة
ذاكرة Stack مقابل Heapالتخصيص الديناميكي - malloc()استخدام sizeof() للتخصيصالتحقق من فشل التخصيصتحرير الذاكرة باستخدام free()التخصيص باستخدام calloc()ملخص: المصفوفة الديناميكية9مشروع: إدخال جهة اتصال بسيطة
مشروع: تعريف Struct جهة الاتصالدالة لإنشاء جهة اتصالتدرّب بنفسك: مترجم C عبر الإنترنت