কম্পিউটার টিউটোরিয়াল

C++-এ 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

দেখা যাচ্ছে প্রোগ্রাম دوم ইনপুট নেয় না। কখনও কখনও دوم ইনপুট নেয় কিন্তু আউটপুটে শুধু প্রথমই দেখায়। কেন এভাবে আচরণ করছে?

মূল কারণ: প্রথম স্ট্রিং লেখার সময় Enter বা Return চাপা হলে '\n' ক্যারেক্টার বর্তমান লাইনের পরে ইনসার্ট হয়। এই ক্যারেক্টারই সমস্যা সৃষ্টি করে। এটি স্ট্রিংএর পরবর্তী অংশ ইগনোর করে দেয়।

যদি নাম "Amal" হয়, তবে ইন্টারন্যালি এটি "Amal\n" পায়। এই সমস্যা সমাধানের একটি উপায় হলো প্রথম এক্সট্র্যাকশনের পর std::cin.ignore() কল করা। তাহলে এটি পরবর্তী উপলব্ধ ক্যারেক্টার ডিসকার্ড করবে এবং ঠিকমতো কাজ করবে।

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

  2. C++ ক্লাসের নামের পরে সেমিকোলন (;) কী করে?

  3. C++-এ 'using namespace std' এর অর্থ কী?

  4. PHP-এ in_array 0 পাস করলে কেন true ফেরত দেয়?