std::getline() কিছু বিন্যাসিত নিষ্কাশনের পরে ইনপুট এড়িয়ে যায়। আমরা নিচের কোড −
থেকে এই ত্রুটিটি সহজভাবে পরীক্ষা করতে পারিউদাহরণ কোড
#include <iostream> #include <string> using namespace std; int main(){ string name; string city; if (cin >> name && getline(cin, city)){ cout << "Your name " << name << " and city " << city; } }
আউটপুট
Amal Your name Amal and city
আমরা দেখতে পাচ্ছি যে প্রোগ্রামটি দ্বিতীয় ইনপুট নেয় না। কিছু সময় এটি দ্বিতীয় ইনপুট নিতে পারে কিন্তু আউটপুটে এটি শুধুমাত্র প্রথম ইনপুট দেখাবে। এখন প্রশ্ন হল কেন এমন আচরণ করছে?
এই সমস্যার প্রধান কারণ হল আমরা যখন প্রথম স্ট্রিং লিখছি, তখন আমরা এন্টার বা রিটার্ন বোতাম টিপছি। যখন এন্টার বা রিটার্ন চাপানো হয়, তখন এটি বর্তমান লাইনের পরে '\n' অক্ষর সন্নিবেশিত করে। এই চরিত্রটি সমস্যা তৈরি করছে। এটি স্ট্রিং এর পরবর্তী অংশ উপেক্ষা করছে।
যদি নামটি "আমল" হয়, তবে অভ্যন্তরীণভাবে এটি "আমল\n" পাচ্ছে। এই সমস্যাটি কাটিয়ে উঠতে একটি বিকল্প হল প্রথম নিষ্কাশনের পরে std::cin.ignore() কল করা। তারপর এটি পরবর্তী উপলব্ধ অক্ষরটি বাতিল করে দেবে, তাই এটি ঠিক কাজ করবে৷