कुछ स्वरूपित निष्कर्षण के बाद 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() को कॉल करना है। फिर यह अगले उपलब्ध चरित्र को त्याग देगा, इसलिए यह ठीक काम करेगा।