الانتقال إلى المحتوى الرئيسي

لماذا يتوقف جيتلاين عن العمل بعد سين في ج++

وظيفة جيتلين () في ج is هو وسيلة مريحة للغاية لقراءة سلسلة من المدخلات القياسية. ومع ذلك ، هناك حالة واحدة حيث قد تتوقف عن العمل — إذا تم استخدام مشغل سين قبل ذلك. في هذه المقالة ، سننظر في سبب حدوث ذلك وكيفية إصلاحه.

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

مثال:

الأمراض المنقولة جنسيا:: اسم السلسلة;

كثافة العمليات العمر;

الأمراض المنقولة جنسيا:: كوت < < " أدخل الاسم: ";

الأمراض المنقولة جنسيا:: سين > > اسم;

الأمراض المنقولة جنسيا:: كوت < < " أدخل العمر: ";

الأمراض المنقولة جنسيا:: سين > > العمر;

الأمراض المنقولة جنسيا:: عنوان السلسلة;

الأمراض المنقولة جنسيا::كوت < < " أدخل العنوان: ";

ستد:: جيتلاين (ستد::سين ، عنوان);

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

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

الأمراض المنقولة جنسيا:: سين.تجاهل (الأمراض المنقولة جنسيا::عددي_الحدود:: ماكس ()،'

');

سيسمح لك هذا السطر بتجاهل جميع الأحرف في دفق الإدخال حتى حرف السطر الجديد. الآن وظيفة جيتلين () سوف تعمل بشكل صحيح.

  1. المشكلة مع وظيفة جيتلين بعد الكتابة مع سين في ج after
  2. جوهر المشكلة
  3. ترتيب عمليات الإدخال
  4. التفاف حرف الخط الجديد
  5. الحلول الممكنة
  6. توصيات للاستخدام
  7. سؤال وجواب
  8. لماذا يتوقف جيتلاين عن العمل بعد سين في ج??
  9. لماذا لا جيتلين العمل على أي حال بعد استخدام سين.تجاهل ()?
  10. كيفية استخدام جيتلاين وسين معا بشكل صحيح?

المشكلة مع وظيفة جيتلين بعد الكتابة مع سين في ج after

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

المشكلة هي أن وظيفة جيتلين () يمكن "التقاط" حرف سطر جديد اليسار في تيار الإدخال بعد استخدام سين. وذلك لأن سين يترك بقية الأحرف في دفق الإدخال بعد قراءة القيمة ، بما في ذلك حرف السطر الجديد.

لفهم هذه المشكلة ، ضع في اعتبارك مثال التعليمات البرمجية التالية:

# تشمل 

# تشمل

كثافة العمليات الرئيسية () {

الأمراض المنقولة جنسيا:: اسم السلسلة;

الأمراض المنقولة جنسيا:: عنوان السلسلة;

الأمراض المنقولة جنسيا:: كوت < < " أدخل الاسم: ";

الأمراض المنقولة جنسيا:: سين > > اسم;

الأمراض المنقولة جنسيا:: كوت < < " أدخل العنوان: ";

ستد:: جيتلاين (ستد::سين ، عنوان);

الأمراض المنقولة جنسيا:: كوت < < "الاسم:" < < اسم < < الأمراض المنقولة جنسيا::إندل;

ستد:: كوت < < "العنوان:" < < عنوان < < ستد:: إندل;

العودة 0;

}

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

لتجنب هذه المشكلة ، يمكنك استخدام الأمراض المنقولة جنسيا::سين.تجاهل () وظيفة لمسح تيار الإدخال قبل استخدام جيتلين ().

# تشمل 

# تشمل

كثافة العمليات الرئيسية () {

الأمراض المنقولة جنسيا:: اسم السلسلة;

الأمراض المنقولة جنسيا:: عنوان السلسلة;

الأمراض المنقولة جنسيا:: كوت < < " أدخل اسما: ";

الأمراض المنقولة جنسيا:: سين > > اسم;

الأمراض المنقولة جنسيا:: سين.تجاهل () ؛ / / مسح دفق الإدخال

الأمراض المنقولة جنسيا:: كوت < < " أدخل العنوان: ";

ستد:: جيتلاين (ستد::سين ، عنوان);

الأمراض المنقولة جنسيا:: كوت < < "اسم:" < < اسم < < الأمراض المنقولة جنسيا:: إندل;

ستد:: كوت < < "العنوان:" < < عنوان < < ستد:: إندل;

العودة 0;

}

بعد إضافة الأمراض المنقولة جنسيا:: سين.تجاهل () إلى التعليمات البرمجية ، يعمل البرنامج بشكل صحيح ، وقراءة القيم لكلا المتغيرين باستخدام جيتلاين ().

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

جوهر المشكلة

المشكلة مع استخدام وظيفة جيتلين() بعد إدخال البيانات باستخدام سين يحدث بسبب وجود حرف سطر جديد ('

') في تيار الإدخال.

عند استخدام دالة سين لإدخال قيمة ، على سبيل المثال ، باستخدام عامل التشغيل > > ، تتم قراءة البيانات إلى المساحة الأولى أو حرف السطر الجديد ('

') ويبقى في تيار الإدخال. في حالة استخدام جيتلين () ، وظيفة يقرأ البيانات تصل إلى حرف السطر الجديد ('

') في تيار المدخلات وتوقف. ومع ذلك ، منذ حرف السطر الجديد ('

') لا يزال في دفق الإدخال بعد استخدام سين ، جيتلين () يقرأ هذا الحرف ويخرج على الفور دون انتظار إدخال بيانات جديدة.

مثال على ذلك هو الكود التالي:

# تشمل

# تشمل

كثافة العمليات الرئيسية () {

الأمراض المنقولة جنسيا:: اسم السلسلة;

كثافة العمليات العمر;

الأمراض المنقولة جنسيا:: كوت < < " أدخل الاسم: ";

الأمراض المنقولة جنسيا:: سين > > الاسم ؛ / / أدخل الاسم

الأمراض المنقولة جنسيا:: كوت < < " أدخل العمر: ";

الأمراض المنقولة جنسيا:: سين > > العمر; // أدخل العمر

الأمراض المنقولة جنسيا:: كوت < < "اسم:" < < اسم < < الأمراض المنقولة جنسيا:: إندل;

الأمراض المنقولة جنسيا:: كوت < < "العمر:" < < العمر < < الأمراض المنقولة جنسيا:: إندل;

الأمراض المنقولة جنسيا:: كوت < < " أدخل العنوان: ";

الأمراض المنقولة جنسيا:: جيتلاين (الأمراض المنقولة جنسيا::سين ، عنوان) ؛ / / تحدث المشكلة هنا

العودة 0;

}

في هذا المثال ، بعد دخول العمر ، لا يطلب البرنامج العنوان ، لأن وظيفة جيتلاين () تقرأ حرف سطر جديد ('

') ، الذي يبقى في تيار الإدخال بعد دخول العمر ، وينتهي على الفور. نتيجة لذلك ، يكمل البرنامج تنفيذه دون القدرة على إدخال عنوان.

لحل هذه المشكلة ، يمكنك استخدام سين.تجاهل () وظيفة ، والتي تتجاهل حرف السطر الجديد ('

') في دفق الإدخال ، بعد أن تم استخدامه لقراءة القيمة. هذا يتجنب المشاكل مع وظيفة جيتلين ().

# تشمل

# تشمل

كثافة العمليات الرئيسية () {

الأمراض المنقولة جنسيا:: اسم السلسلة;

كثافة العمليات العمر;

الأمراض المنقولة جنسيا:: كوت < < " أدخل الاسم: ";

الأمراض المنقولة جنسيا:: سين > > الاسم ؛ / / أدخل الاسم

الأمراض المنقولة جنسيا:: كوت < < " أدخل العمر: ";

الأمراض المنقولة جنسيا:: سين > > العمر ؛ / / دخول العمر

الأمراض المنقولة جنسيا:: كوت < < "اسم:" < < اسم < < الأمراض المنقولة جنسيا:: إندل;

الأمراض المنقولة جنسيا:: كوت < < "العمر:" < < العمر < < الأمراض المنقولة جنسيا:: إندل;

الأمراض المنقولة جنسيا:: سين.تجاهل(); // تجاهل حرف السطر الجديد ('

')

الأمراض المنقولة جنسيا:: كوت < < " أدخل العنوان: ";

الأمراض المنقولة جنسيا:: جيتلاين (الأمراض المنقولة جنسيا::سين ، عنوان) ؛ / / الآن كل شيء يعمل بشكل صحيح

العودة 0;

}

الآن يطلب البرنامج بنجاح العنوان بعد دخول العمر.

ترتيب عمليات الإدخال

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

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

قد تحدث المشكلة عندما يبقى حرف سطر جديد بعد الكتابة مع سين

'في المخزن المؤقت الإدخال. عندما يصل دفق الإدخال إلى عملية جيتلاين ، فإنه يقرأ هذا الحرف الجديد ويعتبر أن الإدخال قد انتهى. نتيجة لذلك ، يظل السطر الذي نتوقع قراءته باستخدام جيتلاين فارغا.

لتجنب هذا الموقف ، تحتاج إلى مسح المخزن المؤقت للإدخال قبل الاتصال جيتلاين. للقيام بذلك ، يمكنك استخدام سين.تجاهل () وظيفة. يسمح لك بتخطي حرف السطر الجديد والأحرف الأخرى من المخزن المؤقت للإدخال.

مثال على استخدام سين.تجاهل () قبل جيتلاين:

نموذج التعليمات البرمجية:

كوت < < " أدخل العمر: ";

سين > > العمر;

كوت < < "الاسم:" < < اسم < < إندل;

كوت < < " العمر: "<<العمر < < إندل;

العودة 0;

}

في هذا المثال ، بعد إدخال الاسم باستخدام جيتلاين ، سين.يتم استدعاء التجاهل () أولا لمسح المخزن المؤقت للإدخال. ثم يطلب من المستخدم إدخال العمر باستخدام سين.

وهكذا ، معرفة وفهم ترتيب تنفيذ عمليات الإدخال في ج help سوف تساعد على تجنب المشاكل مع وظيفة جيتلين بعد سين وجعل البرنامج أكثر موثوقية وسهلة الاستخدام.

التفاف حرف الخط الجديد

نقل حرف السطر الجديد (الرمز

) هو جانب مهم أن نأخذ في الاعتبار عند العمل مع وظيفة جيتلين() في ج++.

وظيفة جيتلين() يدخل البيانات من تيار الإدخال القياسية حتى يتم مواجهة حرف سطر جديد. ومع ذلك ، إذا تم استخدام وظيفة سين قبل استدعاء وظيفة جيتلين () ، قد يتم تخطي حرف السطر الجديد.

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

من أجل تجنب هذه المشكلة ، يمكنك استخدام وظيفة سين.تجاهل () بعد استدعاء وظيفة سين لمسح المخزن المؤقت قبل استدعاء وظيفة جيتلين ().

  • على سبيل المثال ، هذا هو ما يبدو الاستخدام الصحيح لوظائف سين و جيتلين ():
  • # تشمل
  • # تشمل
  • كثافة العمليات الرئيسية () {
  • الأمراض المنقولة جنسيا:: اسم السلسلة;

الأمراض المنقولة جنسيا:: كوت < < " أدخل اسمك:";

الأمراض المنقولة جنسيا:: سين > > اسم;

الأمراض المنقولة جنسيا:: سين.تجاهل () ؛ / / مسح المخزن المؤقت

  • الأمراض المنقولة جنسيا:: كوت < < "مرحبا ،" < < اسم <<"!"<<الأمراض المنقولة جنسيا:: إندل;
  • العودة 0;
  • }
  • في هذا المثال ، بعد إدخال الاسم باستخدام دالة سين ، سين.يتم استدعاء وظيفة تجاهل() لمسح المخزن المؤقت. ثم يتم استدعاء وظيفة جيتلين () ، الذي يقرأ بنجاح سلسلة تصل إلى حرف السطر الجديد.

الآن بعد أن كنت معتادا على مشكلة فقدان حرف سطر جديد بعد وظيفة سين وكيفية حلها ، يمكنك بنجاح استخدام وظيفة جيتلين() في برامج سي your الخاص بك.

الحلول الممكنة

إذا توقفت وظيفة جيتلين عن العمل بعد سين في ج++ ، يمكن أن يكون سببها عدة أسباب. فيما يلي بعض الحلول الممكنة:

تحقق من أن المتغير الذي تم تمريره إلى دالة جيتلين هو سلسلة صالحة. ربما تكون قد نسيت الإعلان عن متغير أو تهيئته.

تأكد من عدم وجود أحرف سطر جديد متبقية بعد عبارة سين. إذا بقيت ، يمكن قراءتها من قبل وظيفة جيتلين ، والتي يمكن أن تؤدي إلى سلوك غير مرغوب فيه. يمكنك استخدام سين.تجاهل () وظيفة لإزالة أحرف السطر الجديد قبل استدعاء جيتلاين.

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

تحقق مما إذا كانت هناك أي عمليات إدخال/إخراج أخرى قبل استدعاء وظيفة جيتلاين. إذا كان هناك ، تأكد من إعادة تعيين حالة الدفق بعد كل عملية إدخال/إخراج باستخدام سين.واضح () وظيفة.

إذا لم تنجح جميع الحلول الأخرى ، فقد تكون المشكلة مرتبطة بالترميز. تأكد من أن ترميز البرنامج يطابق ترميز الإدخال / الإخراج. استخدم الدالة سيتلوكالي () لتعيين الترميز الصحيح.