नामक कंसोल से इनपुट की प्रतीक्षा नहीं कर रहा है, मैं कंसोल, दो स्ट्रिंग्स, दो इन्ट्स और डबल से कुछ उपयोगकर्ता-इनपुट पैरामीटर प्राप्त करने का प्रयास कर रहा हूं।सी ++ गेटलाइन() कई बार
#include <string>
#include <iostream>
using namespace std;
// ...
string inputString;
unsigned int inputUInt;
double inputDouble;
// ...
cout << "Title: ";
getline(cin, inputString);
tempDVD.setTitle(inputString);
cout << "Category: ";
getline(cin, inputString);
tempDVD.setCategory(inputString);
cout << "Duration (minutes): ";
cin >> inputUInt;
tempDVD.setDuration(inputUInt);
cout << "Year: ";
cin >> inputUInt;
tempDVD.setYear(inputUInt);
cout << "Price: $";
cin >> inputDouble;
tempDVD.setPrice(inputDouble);
हालांकि, जब कार्यक्रम चल रहा है, के बजाय पहले inputString के लिए इंतज़ार कर दर्ज किए जाने की की, कोड दूसरा getline जब तक बंद नहीं() कॉल: प्रासंगिक कोड मैं उपयोग करने के लिए कोशिश कर रहा हूँ यह है । कर्सर श्रेणी के बाद प्रदर्शित होने के साथ
: इस प्रकार सांत्वना उत्पादन इस तरह दिखता है:
शीर्षक: श्रेणी। अगर मैं अब इनपुट करता हूं, तो प्रोग्राम साल के इनपुट तक आगे बढ़ता है, मुझे एक से अधिक स्ट्रिंग में प्रवेश करने की इजाजत नहीं देता है। यहाँ क्या हो रहा है?
पुन: पेश नहीं कर सकते उपयोग करने से पहले
या के रूप में @kernald उल्लेख उपयोग
उपयोग कर सकते हैं; असली, पूर्ण कोड पोस्ट करें। मुझे यकीन है कि आपकी समस्या कहीं और है। साथ ही, स्वरूपित इनपुट और 'getline() 'मिश्रण न करें। –
@ केरेकस्क: मैं मानता हूं कि उन्हें मिलाकर खराब शैली का एक लक्षण है, लेकिन उन्हें मिश्रण न करने का उद्देश्य क्या है? मुझे लगता है कि वास्तव में उन्हें मिश्रण करने के लिए यह पूरी तरह से मान्य है। – sehe
@sehe: समस्या यह है कि स्वरूपित निष्कर्षण न्यूलाइन का उपभोग नहीं करता है, इसलिए जब आप पहले से ही सभी पिछली पंक्ति को संसाधित करते हैं, तो यह सोचने के बाद 'getline()' अप्रत्याशित परिणाम प्राप्त करना बहुत आसान होता है। मैं यह नहीं कह रहा कि यह असंभव है, लेकिन यह अक्सर तर्क को पढ़ने और बनाए रखने के लिए तर्क को बहुत कठिन बनाता है। –