إدخال بيانات من المستخدم في السي بلاس بلاس | C++ cin cout


إدخال بيانات من المستخدم في السي بلاس بلاس

مقدمة في الدروس السابقة, كنا نكتب الكود ثم نقوم بتجربته فيتنفذ كما هو, بمعنى أننا كنا أصلاً نعرف ما سيظهر عند تشغيل الكود لأننا كنا نقوم بتحديد قيم المتغيرات قبل تشغيل البرنامج.

في هذا الدرس ستتعلم كيف تنشئ برنامح يتفاعل مع المستخدم, حيث أنك عندما تقوم بتشغيله سيطلب من المستخدم إدخال بيانات, و بعد إدخالها سيقوم البرنامج بمعالجتها و فعل شيء معين بها .


أمر الإدخال cin في C++

لجعل المستخدم قادر على إدخال بيانات في البرنامج أثناء اشتغاله نستخدم أمر الإدخال cin >>.
الأمر cin موجود في الحزمة std و لهذا يجب ان تكتب std::cin إن لم تكن تريد تضمين الحزمة std في برنامجك.

في كل مرة تقوم فيها باستدعاء هذا الأمر يقوم المترجم بانتظارك لإدخال عدد أو كلمة واحدة من لوحة المفاتيح Keyboard ).
بعد الإنتهاء من الإدخال و النقر على الزر Enter سيتم إرجاع الشيء الذي قمت بإدخاله في المكان الذي تم منه إستدعاء الأمر cin >>.


مثال أمر الإدخال cin في C++

main.cpp
                    #include <iostream>

                    using namespace std;

                    int main()
                    {
                    // لتخزين المعلومات التي سيدخلها المستخدم لاحقاً age و name قمنا بتجهيز المتغيرين
                    string name;
                    int age;

                    // name هنا سيطلب من المستخدم إدخال إسمه و من ثم سيتم تخزين الإسم الذي يدخله في المتغير
                    cout << "What's your name? ";
                    cin >> name;

                    // age هنا سيطلب من المستخدم إدخال عمره و من ثم سيتم تخزين الرقم الذي يدخله في المتغير
                    cout << "How old are you? ";
                    cin >> age;

                    // في الأخير قمنا بعرض المعلومات التي يدخلها المستخدم بشكل مرتب
                    cout << "Your name is " << name << ", and your age is " << age << " years.";

                    return 0;
                    }
                  

سنحصل على النتيجة التالية عند التشغيل مع الإشارة إلى أننا قمنا بتعليم البيانات التي إنتظرنا البرنامج لإدخالها من لوحة المفاتيح باللون الأصفر.

What's your name? Saddam
How old are you? 25

Your name is Saddam, and your age is 25 years.

الفرق بين الأمر cin و الأمر cout في C++

في البداية معرفة سبب تسمية الأوامر بهذه الكلمات سيسهل عليك تذكر الفرق بينهما, لذا تذكر دائماً أصلهما:

  • cin يقصد بها كلمة See In و التي بدورها تستخدم لإدخال قيمة في المتغير.

  • cout يقصد بها كلمة See Out و التي بدورها تستخدم للحصول على قيمة المتغير.


الأمر cin نضع بعده إسم المتغير الذي سنخزن القيمة التي يدخلها المستخدم فيها و تكون الأسهم باتجاه اليمين كالتالي.

                  // x قم بتخزين ما سيدخله المستخدم في المتغير
                  cin >> x;
                

الأمر cout نضع بعده أي شيء نريد عرضه أو أي متغير نريد عرض قيمته و تكون الأسهم باتجاه اليسار كالتالي.

                  // x قم بعرض القيمة المدخلة في المتغير
                  cout << "x = " < < a;
                

المشاكل التي يسببها إدخال مسافات فارغة في C++

تذكر دائماً أن الأمر cin >> يستخدم لإدخال رقم أو كلمة واحدة فقط بمعنى أنه لا يجب أن يحتوي ما تدخله على مسافات فارغة.

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

 

في المثال التالي, قمنا بإنشاء برنامج يطلب من المستخدم إدخال إسمه و بريده الإلكتروني, بعدها يعرض له ما قام بإدخاله.
عند تشغيل البرنامج سنتعمد إدخال إسم المستخدم الكامل (إسمه و إسم عائلته) مع وضع مسافة فارغة بينهما حتى ترى الخطأ الذي سيحدث.

مثال برنامج يطلب من المستخدم إدخال إسمه و بريده الإلكتروني, بعدها يعرض له ما قام بإدخاله.

main.cpp
                    #include <iostream>

                    using namespace std;

                    int main()
                    {
                    // لتخزين المعلومات التي سيدخلها المستخدم لاحقاً email و name قمنا بتجهيز المتغيرين
                    string name;
                    string email;

                    // name هنا سيطلب من المستخدم إدخال إسمه و من ثم سيتم تخزين الإسم الذي يدخله في المتغير
                    cout << "Enter your name: ";
                    cin >> name;

                    // email هنا سيطلب من المستخدم إدخال بريده الإلكتروني و من ثم سيتم تخزين البريد الذي يدخله في المتغير
                    cout << "Enter your email: ";
                    cin >> email;

                    // في الأخير قمنا بعرض المعلومات التي يدخلها المستخدم بشكل مرتب
                    cout << "\n\n---------------------";
                    cout << "\nName = " << name;
                    cout << "\nEmail = " << email;

                    return 0;
                    }
                  

سنحصل على النتيجة التالية عند التشغيل مع الإشارة إلى أننا قمنا بتعليم البيانات التي إنتظرنا البرنامج لإدخالها من لوحة المفاتيح باللون الأصفر.

Enter your name: saddam alawiri
Enter your email:               <- لاحظ أنه لم ينتظرنا لندخل البريد الإلكتروني بل إعتبر أنه تم إدخاله

---------------------
Name = saddam                   <- name فقط في المتغير saddam لاحظ أنه قام بوضع
Email = alawiri                 <- بشكل تلقائي email في المتغير alawiri لاحظ أنه قام بوضع

إدخال نص بواسطة الدالة getline() في C++

إذا أردت جعل المستخدم قادر على إدخال أكثر من كلمة و تخزين كل ما يدخله في متغير نصّي واحد, يمكنك إستخدام الأمر cin لجعل المترجم ينتظر المستخدم حتى يدخل ما يشاء, و من ثم تقوم بتغليف ما سيتم إدخاله بواسطة الدالة getline() و التي ستقوم باعتبار كل ما تم إدخاله عبارة عن نص واحد.

 

إذاً الأمر التالي هو ما تحتاجه لإستقبال نص من المستخدم.

                  // x قم بتخزين كل النص الذي سيدخله المستخدم في المتغير
                  getline(cin, x);
                

ملاحظة: الدالة getline() موجودة في الحزمة std و لهذا يجب ان تكتب std::getline(std::cin, x) إن لم تكن تريد تضمين الحزمة std في برنامجك.


في المثال التالي قمنا بتعريف مثال يطلب من المستخدم إدخال إسمه الكامل (إسمه و إسم عائلته) و من ثم يعرض له رسالة ترحيب.

مثال ادخال نص بواسطة الدالة getline() في C++

main.cpp
                    #include <iostream>

                    using namespace std;

                    int main()
                    {
                    // لتخزين الإسم الذي سيدخله المستخدم لاحقاً name قمنا بتجهيز المتغير
                    string name;

                    // name هنا سيطلب من المستخدم إدخال إسمه الكامل و من ثم سيتم تخزين الإسم الذي يدخله في المتغير
                    cout << "Enter your name: ";
                    getline(cin, name);

                    // في الأخير قمنا بعرض المعلومات التي يدخلها المستخدم بشكل مرتب
                    cout << "Welcome " << name;

                    return 0;
                    }
                  

سنحصل على النتيجة التالية عند التشغيل مع الإشارة إلى أننا قمنا بتعليم البيانات التي إنتظرنا البرنامج لإدخالها من لوحة المفاتيح باللون الأصفر.

Enter your name: saddam alawiri
Welcome saddam alawiri
____