जब सीन एक इनपुट से मुकाबला करता है तो यह निर्दिष्ट चर (जैसे एक वर्ण को एक पूर्णांक चर में इनपुट करने) में ठीक से पढ़ नहीं सकता है, यह एक त्रुटि स्थिति में जाता है और इनपुट को इसके बफर में छोड़ देता है।
आपको इस परिदृश्य को ठीक से संभालने के लिए कई चीजें करना है।
- आपको इस त्रुटि स्थिति का परीक्षण करना होगा।
- आपको त्रुटि स्थिति को साफ़ करना होगा।
- आपको या तो त्रुटि डेटा उत्पन्न करने वाले इनपुट डेटा को वैकल्पिक रूप से संभालना होगा, या इसे फ़्लश करना होगा और उपयोगकर्ता को दोबारा प्रिंट करना होगा।
निम्नलिखित कोड इन तीनों चीजों को करने के कई तरीकों में से एक प्रदान करता है।
#include<iostream>
#include<limits>
using namespace std;
int main()
{
cout << "Enter an int: ";
int x = 0;
while(!(cin >> x)){
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input. Try again: ";
}
cout << "You enterd: " << x << endl;
}
तुम सिर्फ कुछ बड़े मान पास कर सकता 1000 की तरह cin.ignore करने के लिए और यह वास्तव में सभी व्यावहारिक प्रयोजनों के लिए एक ही तरीके से व्यवहार करने की संभावना है।
आप इनपुट प्रयास के बाद भी सिने का परीक्षण कर सकते हैं और इसे इस तरह से संभाल सकते हैं, जैसे कुछ (! Cin) {// त्रुटि को साफ़ करें}।
बाहर चेक अन्य सदस्य कार्यों धारा राज्य संभाल करने के लिए IStream संदर्भ: http://cplusplus.com/reference/iostream/istream/
सब कुछ एक स्ट्रिंग में पढ़ें और तदनुसार इनपुट पार्स करें? – Rhexis
cin.get() का उपयोग करें और फिर ईओएफ चरित्र की जांच करें? – Ansari