البرمجة

تحسين برمجة هيكل C++ لإدخال بيانات الحواسيب

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

أولًا، بالنسبة لمشكلة “core dumped” التي تظهر عند تشغيل البرنامج، يبدو أن هناك خطأ في استخدام المؤشر machine دون تخصيص الذاكرة له. يجب عليك تحديد machine باستخدام عملية تخصيص الذاكرة (allocation) مثل new لكل حالة من الحالات في الحلقة. يمكنك استخدام مصفوفة من الهياكل بدلاً من ذلك، وذلك لتجنب مشاكل تحديد المؤشرات.

ثانيًا، بالنسبة لتحذيرات fgets، يمكنك استخدام cin.ignore() بدلاً من fflush(stdin) لتجنب مشاكل الإدخال.

ثالثًا، يمكن تحسين بعض جوانب الشيفرة لتحسين الكفاءة. على سبيل المثال، يمكنك استخدام cin بدلاً من fgets لتسهيل عملية الإدخال. كما يمكنك استخدام حلقة for بحيث تبدأ من 0 إلى 4 بدلاً من 0 إلى 3 لتتناسب مع حجم المصفوفة.

إليك نسخة محسنة من الشيفرة:

cpp
#include using namespace std; int main() { struct PC { char Brand[20]; char Model[20]; char Serial[20]; char Processor[10]; }; PC PC1[5]; for (int i = 0; i < 5; ++i) { cout << "Insert PC brand: "; cin.getline(PC1[i].Brand, 20); cout << "Insert PC model: "; cin.getline(PC1[i].Model, 20); cout << "Insert PC serial: "; cin.getline(PC1[i].Serial, 20); cout << "Insert PC processor: "; cin.getline(PC1[i].Processor, 10); cout << "PC Brand: " << PC1[i].Brand << endl; cout << "PC Model: " << PC1[i].Model << endl; cout << "PC Serial: " << PC1[i].Serial << endl; cout << "PC Processor: " << PC1[i].Processor << endl; } return 0; }

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

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

بالطبع، دعنا نوسّع المحتوى بتوفير مزيد من المعلومات والتحليل لتعزيز فهم الشيفرة وتقديم بعض الإرشادات لتحسين الكود.

أولًا، يجب أن نشير إلى أنه في الشيفرة الأصلية، قمت بتعريف مصفوفة من هيكل PC بحجم 5 (PC PC1[5]) ولكن قمت بتكرار الحلقة لأربع مرات فقط (for(i = 0; i < 4; i++)). يجب تعديل الحلقة لتكون for(i = 0; i < 5; i++) لضمان أن تتم معالجة جميع العناصر في المصفوفة.

ثانيًا، يمكن تحسين استخدام cin بشكل أكبر لتجنب مشاكل الإدخال وتحسين قابلية القراءة. يمكنك استخدام cin.ignore() بعد cin لتفادي مشكلات التبادل بين getline و cin عند القراءة.

ثالثًا، يمكن أن يؤدي تحديد المتغير i كـ unsigned int إلى تكرار الحلقة 4 مرات فقط في حالتك الأصلية. للتوافق مع حجم المصفوفة، يفضل تحديد i كـ int.

رابعًا، يجب أن يتم تعيين قيمة المؤشر machine ليشير إلى الهيكل الذي يتم تخصيص الذاكرة له. يمكن استخدام new لتخصيص الذاكرة أو يمكن تحديد machine كـ PC machine; واستخدام &machine في fgets.

ختامًا، يمكنك تجربة الشيفرة المعدلة التالية:

cpp
#include using namespace std; int main() { struct PC { char Brand[20]; char Model[20]; char Serial[20]; char Processor[10]; }; PC PC1[5]; for (int i = 0; i < 5; ++i) { cout << "Insert PC brand: "; cin.getline(PC1[i].Brand, 20); cin.ignore(); cout << "Insert PC model: "; cin.getline(PC1[i].Model, 20); cin.ignore(); cout << "Insert PC serial: "; cin.getline(PC1[i].Serial, 20); cin.ignore(); cout << "Insert PC processor: "; cin.getline(PC1[i].Processor, 10); cin.ignore(); cout << "PC Brand: " << PC1[i].Brand << endl; cout << "PC Model: " << PC1[i].Model << endl; cout << "PC Serial: " << PC1[i].Serial << endl; cout << "PC Processor: " << PC1[i].Processor << endl; } return 0; }

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

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

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

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

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