कुछ फॉर्मेटेड एक्सट्रैक्शन के बाद 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' वर्ण डालता है। यह वर्ण समस्या उत्पन्न कर रहा है। यह स्ट्रिंग के अगले हिस्से को अनदेखा कर रहा है।
यदि नाम "Amal" है, तो आंतरिक रूप से यह "Amal\n" प्राप्त कर रहा है। इस समस्या को दूर करने का एक विकल्प पहले एक्सट्रैक्शन के बाद std::cin.ignore() कॉल करना है। फिर यह अगले उपलब्ध वर्ण को त्याग देगा, इसलिए यह ठीक काम करेगा।