عند فحص الشيفرة التي قدمتها، يظهر أن هناك خطأً بسيطًا في الطريقة التي تم بها قراءة الإدخال من المستخدم. السبب في ذلك هو أن دالة cin
تترك خلفها الرموز الجديدة \n
في الذاكرة بعد قراءة الرقم، وهذا يؤثر على القراءة اللاحقة باستخدام cin.get()
.
لتفادي هذا الخطأ، يمكنك إزالة الرموز الجديدة من الذاكرة بواسطة cin.ignore()
بعد القراءة باستخدام cin
. سيتم ذلك كما هو موضح في الشيفرة التالية:
-
استخدام @HostBinding و @Input في Angular15/03/2024
-
كيفية حذف جميع المفاتيح في Redis05/03/2024
cpp#include
#define N 50
using namespace std;
struct movies_t
{
char title[60];
int year;
} user[N];
void printmovie(movies_t);
int main()
{
for (int i = 0; i < N; i++)
{
cout << "Enter title: ";
cin.get(user[i].title, 60);
cin.ignore(); // تجاوز الرمز الجديد في الذاكرة
cout << "Enter year: ";
cin >> user[i].year;
cin.ignore(); // تجاوز الرمز الجديد في الذاكرة
}
cout << "\nYou have entered these movies: \n";
for (int i = 0; i < N; i++)
printmovie(user[i]);
return 0;
}
void printmovie(movies_t m)
{
cout << m.title;
cout << " (" << m.year << ")\n";
}
هذه التعديلات يجب أن تساعد في حل المشكلة التي واجهتها أثناء تشغيل الشيفرة. تأكد من إضافة cin.ignore()
بعد كل استخدام لـ cin
لضمان قراءة صحيحة للإدخال من المستخدم.
المزيد من المعلومات
بالتأكيد، سنقوم الآن بتوسيع النقاش حول بعض النقاط المهمة في الشيفرة، وسنقدم توجيهات إضافية حول بعض المفاهيم.
أولاً وقبل كل شيء، يُشير استخدام #define N 50
إلى تعريف ثابت N
بقيمة 50. هذا يعني أن حجم الهيكل user
هو 50. إذا كنت ترغب في تغيير حجم الهيكل أو القائمة، يمكنك تعديل هذا الرقم وفقًا لاحتياجاتك.
تستخدم الشيفرة هيكل movies_t
لتخزين معلومات الأفلام، حيث يحتوي الهيكل على سلسلة من الأحرف (title
) وعلى عدد صحيح (year
). الاستخدام السليم للهيكل يجعل الشيفرة أكثر فهمًا وتنظيمًا.
الدالة printmovie
تقوم بطباعة معلومات الفيلم، وتستدعى من داخل الحلقة التي تقوم بطلب إدخال المستخدم وتخزينه في هيكل user
.
على الرغم من أن الشيفرة تقوم بتحسين قراءة السلاسل باستخدام cin.get()
بدلاً من cin >>
لتجنب مشاكل الفراغات، إلا أنه يُفضل أيضًا استخدام cin.ignore()
لتجاوز الرمز الجديد \n
في الذاكرة بعد كل استخدام لـ cin
، كما تم ذكره سابقًا.
عند تطوير برامجك، يمكنك أيضًا استكشاف إمكانية التحقق من صحة الإدخال المستخدم، على سبيل المثال، عن طريق التحقق من أن السنة المدخلة هي عدد صحيح وليست سلسلة نصية.
في الختام، يُفضل دائمًا التوثيق الجيد للشيفرة، مما يجعل الكود أكثر قابلية للصيانة وفهمًا. انتبه أيضًا إلى التعليقات التوضيحية لشرح بعض الجوانب المهمة في الشيفرة.