Wednesday, 15 April 2015

c++ - cin and getline skipping input -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 2 जवाब

पहले मैंने एक प्रश्न पोस्ट किया cin इनपुट को छोड़ देना, और मुझे परिणामों को फ्लश करने के लिए मिला, और istringstream का उपयोग किया गया, लेकिन अब मैंने हर संभव समाधान की कोशिश की लेकिन उनमें से कोई भी काम नहीं करता।

यहां मेरा कोड है:

  शून्य बनाने के लिए नया ग्राहक () {string name, address; Cout & lt; & lt; "एक नया ग्राहक बना रहा है ..." & lt; & lt; endl; Cout & lt; & lt; "ग्राहक का नाम दर्ज करें:"; गेटलाइन (पाप, नाम); Cout & lt; & lt; "ग्राहक का पता दर्ज करें:"; गेटलाइन (पिन, पता); ग्राहक ग (नाम, पता, 0); CustomerDB :: addCustomer (ग); Cout & lt; & lt; endl; }  

लेकिन मुझे अभी भी एक ही चीज़ मिल रही है, इनपुट छोड़ना है, और जब यह इनपुट लेता है, तो ये उन्हें लेता है और नाम से कुछ भी खाली नहीं रखता है, और पते में यह लिखा है जो मैंने लिखा था

मेरे कोड में क्या गलत है

मैंने कोशिश की cin.ignore () ,

संपादित करें:

Main.cpp में मुख्य विधि invokes मुख्य मेनू () केवल

  शून्य मुख्य मेनू () {char पसंद; करना {system ("cls"); mainMenuDisplay (); Cin & gt; & gt; विकल्प; प्रणाली ( "cls"); स्विच (पसंद) {मामला '1': ग्राहक मेनू (); टूटना; मामले '2': डीवीडीमेनू (); टूटना; मामले '3': रसीदमैनू (); टूटना; मामले '4': आउटरो (); टूटना; डिफ़ॉल्ट: cout & lt; & lt; '\ए'; } Cin.ignore (); cin.get (); } जबकि (विकल्प! = '4'); }  

मैं ग्राहक उदाहरण के लिए 1 का चयन करूंगा, यह ग्राहक मेनू ()

  शून्य ग्राहक मेनू () {चार विकल्प ; करना {system ("cls"); manageCustomerMenu (); Cin & gt; & gt; विकल्प; प्रणाली ( "cls"); स्विच (पसंद) {मामला '1': createNewCustomer (); टूटना; मामले '2': हटाएं ग्राहक (); टूटना; मामले '3': updateCustomerStatus (); टूटना; मामले '4': दृश्य ग्राहक सूची (); टूटना; मामले '5': मुख्य मेनू (); टूटना; डिफ़ॉल्ट: cout & lt; & lt; '\ए'; } Cin.ignore (); cin.get (); } जबकि (पसंद! = '5'); }  

मैं एक नया ग्राहक ऑब्जेक्ट बनाने के लिए 1 बार फिर से चुनता हूं, जो अब मेनफंक्शन सीपीपी पर जाएंगे, जो फ़ंक्शन createNewCustomer () को लागू करेगा पहले एक।

  शून्य बनाएँनई ग्राहक () {string name, address; Cout & lt; & lt; "एक नया ग्राहक बना रहा है ..." & lt; & lt; endl; Cout & lt; & lt; "ग्राहक का नाम दर्ज करें:"; cin.getline (नाम, 256); Cout & lt; & lt; "ग्राहक का पता दर्ज करें:"; cin.getline (पता, 256); ग्राहक ग (नाम, पता, 0); CustomerDB :: addCustomer (ग); Cout & lt; & lt; endl; }  

यदि आप getline के बाद सीन & gt; & gt; कुछ , आपको बफर के बीच में न्यूलाइन को फ्लश करने की जरूरत है।

इस के लिए मेरी व्यक्तिगत पसंदीदाता है कि यदि कोई नई पंक्ति अतीत में वर्णों की आवश्यकता हो तो cin.sync () । हालांकि, यह क्रियान्वयन को परिभाषित किया गया है, इसलिए यह उसी तरह काम नहीं करेगा जैसा कि मेरे लिए करता है कुछ ठोस के लिए, cin.ignore () का उपयोग करें। या वांछनीय अगर अग्रणी सफेद स्थान निकालने के लिए std :: ws का उपयोग करें:

  int a; Cin & gt; & gt; ए; Cin.ignore (std :: numeric_limits & lt; std :: streamsize & gt; :: max (), '\ n'); // जब तक कि नई लाइन नहीं मिल पाती / // मेरी विधि: cin.sync (); // अपठित अक्षर स्ट्रिंग त्यागें; गेटलाइन (पिन, एस); // नई लाइन चली गई है, इसलिए यह अन्य विधि को निष्पादित करता है: गेटलाइन (cin & gt; & gt; ws, s); // सभी प्रमुख सफेद स्थान निकालें  

No comments:

Post a Comment