কম্পিউটার

কেন std::getline() ফর্ম্যাট করা নিষ্কাশনের পরে ইনপুট এড়িয়ে যায়?


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() কল করা। তারপর এটি পরবর্তী উপলব্ধ অক্ষরটি বাতিল করে দেবে, তাই এটি ঠিক কাজ করবে৷


  1. C++ এ একটি কমা-ডিলিমিটেড std::স্ট্রিং পার্স করা হচ্ছে

  2. একটি C++ শ্রেণীর নামের পরে একটি সেমিকোলন কী করে?

  3. C++ এ 'নেমস্পেস std ব্যবহার করা' মানে কি?

  4. কেন php এর in_array একটি 0 পাস হলে সত্য ফিরে আসে?