البرمجة

إنشاء دليل هاتف بلغة C++: استكشاف وتصحيح الأخطاء

في الكود الذي قدمته، تحاول تنفيذ برنامج لإنشاء دليل هاتف باستخدام لغة البرمجة C++. ومع ذلك، يبدو أن هناك بعض المشاكل في الشيفرة البرمجية تؤدي إلى توقف البرنامج عند إدخال عنوان “Address”. دعونا نقوم بتحليل الكود وتحديد الأخطاء:

  1. التحجيم الخاطئ للذاكرة:
    في بداية البرنامج، قمت بتخصيص ذاكرة باستخدام malloc لـ Phonebook، ولكن هناك تحجيم إضافي باستخدام realloc داخل الحلقة. هذا قد يؤدي إلى تكرار التخصيص مما يمكن أن يسبب مشكلات في الذاكرة.

  2. استخدام gets:
    تستخدم دالة gets للحصول على الاسم والعنوان. ومع ذلك، يفضل عدم استخدام gets لأنها تفتقر إلى التحقق من الحدود، مما يمكن أن يؤدي إلى تجاوز حجم السلسلة وتلف الذاكرة.

  3. المشكلة في تقسيم المعلومات:
    بعد كل إدخال، تزيد قيمة Number بمقدار واحد. هذا يجعل البرنامج يتوقف عند إدخال “Address” لأنه في الحلقة يجب أن تكون القراءة في Information[Number].Name، ثم Information[Number].Address، وليس Information[Number].Address مباشرة.

اليك كود معدل لحل هذه المشاكل:

cpp
#include #include typedef struct { char Name[50]; char Address[50]; long Phone_number; } Phonebook; int main() { int Counter; long Number_of_residents; printf("Enter the number of residents: "); scanf("%ld", &Number_of_residents); Phonebook *Information = (Phonebook *)malloc(Number_of_residents * sizeof(Phonebook)); for (Counter = 0; Counter < Number_of_residents; Counter++) { printf("Enter Name: "); scanf("%s", Information[Counter].Name); printf("Enter Address: "); scanf("%s", Information[Counter].Address); printf("Enter Phone Number: "); scanf("%ld", &Information[Counter].Phone_number); } free(Information); return 0; }

قمت بتحسين التحجيم واستخدمت scanf للحصول على الاسم والعنوان، وأيضًا قمت بتصحيح تقسيم المعلومات. يجب على هذا الكود أن يكون أكثر قدرة على التعامل مع إدخال العنوان دون توقف.

المزيد من المعلومات

في محاولتك لإنشاء دليل هاتف باستخدام لغة البرمجة C++، قد قمت بتعريف هيكل بيانات باسم Phonebook يحتوي على حقول لاسم الشخص (Name)، وعنوانه (Address)، ورقم هاتفه (Phone_number). كما استخدمت دالة malloc لتخصيص ذاكرة ديناميكية للهيكل، واستخدمت realloc داخل حلقة لتعديل حجم الذاكرة المخصصة.

ومع ذلك، كما تم التطرق إليه في الإجابة السابقة، واجهت بعض المشاكل في الكود، مثل استخدام gets الذي يمكن أن يتسبب في مشاكل تجاوز الحدود، وتحجيم غير صحيح للذاكرة.

تم تصحيح الأخطاء في الكود المعدل وتحسينه بمراعاة الحدود أثناء الإدخال وضمان تحجيم الذاكرة بشكل صحيح.

هذا الكود المعدل يتيح للمستخدم إدخال عدد من السكان، ثم يقوم بقراءة الاسم والعنوان ورقم الهاتف لكل فرد ويخزنها في مصفوفة من هياكل Phonebook. يتم تحرير الذاكرة المخصصة في النهاية باستخدام free.

يمكنك أيضًا تحسين البرنامج بإضافة ميزات إضافية مثل البحث في دليل الهاتف أو طباعة المعلومات المخزنة بشكل منظم.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر