Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> 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

हम देख सकते हैं कि प्रोग्राम दूसरा इनपुट नहीं लेता। कभी-कभी यह दूसरा इनपुट ले सकता है लेकिन आउटपुट में केवल पहला इनपुट दिखाएगा। अब सवाल यह है कि यह ऐसा व्यवहार क्यों कर रहा है?

इस समस्या का मुख्य कारण यह है कि जब हम पहला स्ट्रिंग लिख रहे होते हैं, तो हम एंटर या रिटर्न बटन दबाते हैं। जब एंटर या रिटर्न दबाया जाता है, तो यह वर्तमान लाइन के बाद '\n' वर्ण डालता है। यह वर्ण समस्या उत्पन्न कर रहा है। यह स्ट्रिंग के अगले हिस्से को अनदेखा कर रहा है।

यदि नाम "Amal" है, तो आंतरिक रूप से यह "Amal\n" प्राप्त कर रहा है। इस समस्या को दूर करने का एक विकल्प पहले एक्सट्रैक्शन के बाद std::cin.ignore() कॉल करना है। फिर यह अगले उपलब्ध वर्ण को त्याग देगा, इसलिए यह ठीक काम करेगा।

  1. - C++ क्लास नाम के बाद सेमीकोलन का क्या अर्थ है?

    यदि आपके पास निम्न जैसे स्टेटमेंट्स हैं – Class Person; यह एक फॉरवर्ड डिक्लेरेशन है। यह बाद के कोड को बताता है कि Person नाम की क्लासेस मौजूद हैं। यह कंपाइलर को संतुष्ट करता है जब यह इन नामों को उपयोग होते देखता है। बाद में लिंकर क्लासेस की परिभाषा ढूंढ लेगा।

  1. - C++ में 'using namespace std' का क्या अर्थ है?

    एक स्थिति पर विचार करें, जब हमारे पास एक ही क्लास में एक ही नाम, पियूष, के दो व्यक्ति हों। जब भी हमें उन्हें अलग करना हो, तो हमें निश्चित रूप से उनके नाम के साथ कुछ अतिरिक्त जानकारी का उपयोग करना होगा, जैसे क्षेत्र, यदि वे अलग क्षेत्र में रहते हैं या उनकी माता या पिता का नाम, आदि। यही स्थिति आपके C

  1. - PHP का in_array 0 पास करने पर true क्यों लौटाता है?

    in_array के TRUE लौटाने का कारण स्ट्रिंग-टू-नंबर रूपांतरण हो सकता है। जब फ़ंक्शन को एक स्ट्रिंग पास की जाती है, तो यह 0 लौटाता है, जो खोजा जाने वाला मान है। PHP ढीले जगलिंग का उपयोग करता है, यानी एलिमेंट्स की तुलना करते समय === के बजाय == का उपयोग करता है। इसलिए, उनके मानों की तुलना की जाती है न कि