البرمجة

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

في هذا السياق، يظهر أنك تواجه مشكلة في الكود البرمجي حيث يتم عرض خطأ “expected primary-expression before ‘.’ token”. هذا الخطأ يشير عادةً إلى أن هناك شيئًا غير صحيح في استخدام النقطة (.) في الكود.

لحل هذا الخطأ، يجب أن نلقي نظرة عن كثب على الكود. في السطور:

cpp
cin>>Employee.Id; cin>>Employee.Name; cin>>Employee.Gender; cin>>Employee.Des; cin>>Employee.Date.day>>Employee.Date.month>>Employee.Date.year;

يبدو أنك تحاول قراءة الإدخال لهيكل Employee، ولكن هنا تكون المشكلة. عند استخدام الدالة Setter، يجب تمرير الهيكل بالإشارة (&) لتحديث القيم داخله. لذلك، يجب تغيير تعريف الدالة Setter كما يلي:

cpp
void Setter(Employee &E) //function for setting value in Employees { cout<<"Enter Id:"; cin>>E.Id; cout<<"Enter Name:"; cin>>E.Name; cout<<"Enter Gender:"; cin>>E.Gender; cout<<"Enter Designation:"; cin>>E.Des; cout<<"Enter Date of joining(DD/MM/YYYY):"; cin>>E.Date.day>>E.Date.month>>E.Date.year; }

تحديث تعريف الدالة بإضافة الرمز & يسمح بتمرير الهيكل بالمرجع، مما يعني أن التغييرات التي تحدث داخل الدالة ستؤثر على الهيكل الأصلي في الدالة main.

أما بالنسبة للجزء الثاني من استفسارك حول كيفية قراءة سلسلة نصية باستخدام cin.getline و gets()، يفضل تجنب استخدام gets() بسبب مشاكل أمان، ولكن بدلاً من ذلك يمكنك استخدام cin.getline كالتالي:

cpp
cout << "Enter Name:"; cin.ignore(); // to clear the input buffer cin.getline(E.Name, 40);

يتم استخدام cin.ignore() لتجاوز أي حروف جديدة في الطابور قبل استخدام cin.getline لتجنب مشاكل في الإدخال.

باختصار، يجب عليك تحديث الدالة Setter بإضافة & وتعديل قراءة السلسلة باستخدام cin.getline لتحقيق الأداء المرجو.

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

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

  1. تحسين استخدام الهياكل:
    يمكنك تحسين هياكل البيانات الخاصة بك باستخدام typedef لتسهيل الاستخدام. على سبيل المثال:

    cpp
    typedef struct { int day; int month; int year; } Date; typedef struct { int Id; char Name[40]; Date JoiningDate; char Gender; char Designation[40]; } Employee;

    هذا يجعل تعريف الهياكل أكثر وضوحًا ويجعل من السهل استخدام الهياكل داخل الكود.

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

    cpp
    cout << "Enter Name:"; cin.ignore(numeric_limits::max(), '\n'); // تجاوز البيانات الزائدة getline(cin, E.Name);

    يحدث ذلك لضمان قراءة السلسلة بشكل صحيح حتى لو كانت تحتوي على فراغات.

  3. تحسين إدارة التاريخ:
    يمكنك تجنب إدخال التاريخ يدويًا واستخدام دالة std::cin بشكل أفضل باستخدام getline ثم استخدام stringstream لتحويل السلسلة إلى أرقام:

    cpp
    cout << "Enter Joining Date (DD/MM/YYYY):"; string dateStr; getline(cin, dateStr); stringstream ss(dateStr); ss >> E.JoiningDate.day >> E.JoiningDate.month >> E.JoiningDate.year;

    هذا يجعل التعامل مع التاريخ أكثر دقة ومرونة.

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

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

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

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

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