cin.ignore() फ़ंक्शन
cin.ignore() फ़ंक्शन इनपुट बफर से एक या अधिक कैरेक्टर्स को इग्नोर या क्लियर करने के लिए उपयोग किया जाता है।
समस्या: इनपुट बफर में बचा हुआ न्यूलाइन
कभी-कभी हमें अवांछित बफर को क्लियर करने की आवश्यकता होती है, ताकि जब अगला इनपुट लिया जाए, तो यह पिछले वेरिएबल के बफर में नहीं बल्कि वांछित कंटेनर में स्टोर हो।
उदाहरण के लिए, cin स्टेटमेंट में प्रवेश करने के बाद, हमें एक कैरेक्टर ऐरे या स्ट्रिंग इनपुट करने की आवश्यकता होती है। इसलिए हमें इनपुट बफर क्लियर करना होगा, अन्यथा यह पिछले वेरिएबल के बफर पर कब्जा कर लेगा। पहले इनपुट के बाद "Enter" कुंजी दबाने पर, चूंकि पिछले वेरिएबल के बफर में नया डेटा रखने की जगह होती है, प्रोग्राम कंटेनर के निम्नलिखित इनपुट को छोड़ देता है।
समस्या प्रदर्शित करने वाला उदाहरण
#include <iostream>
#include <vector>
using namespace std;
int main() {
int x;
char str[80];
cout << "Enter a number and a string:\n";
cin >> x; // संख्या पढ़ता है, '\n' बफर में छोड़ देता है
cin.getline(str, 80); // तुरंत '\n' पढ़ता है, खाली स्ट्रिंग देता है
cout << "You have entered:\n";
cout << x << endl;
cout << str << endl;
return 0;
}
आउटपुट
Enter a number and a string: 8 You have entered: 8 (स्ट्रिंग खाली - getline छोड़ दिया गया)
समाधान: cin.ignore()
इस समस्या को हल करने के लिए, हम cin.ignore() फ़ंक्शन का उपयोग करेंगे। यह फ़ंक्शन दिए गए रेंज तक इनपुट को इग्नोर करने के लिए उपयोग किया जाता है।
सिंटैक्स
cin.ignore(n); // n कैरेक्टर्स इग्नोर करें cin.ignore(n, delim); // n कैरेक्टर्स या delim तक इग्नोर करें cin.ignore(numeric_limits<streamsize>::max(), '\n'); // लाइन के अंत तक सब इग्नोर करें
सही उदाहरण
#include <iostream>
#include <ios> // streamsize के लिए
#include <limits> // numeric_limits के लिए
using namespace std;
int main() {
int x;
char str[80];
cout << "Enter a number and a string:\n";
cin >> x;
// नई लाइन सहित बफर क्लियर करें
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.getline(str, 80); // अब स्ट्रिंग सही ढंग से पढ़ता है
cout << "You have entered:\n";
cout << x << endl;
cout << str << endl;
return 0;
}
आउटपुट
Enter a number and a string: 4 Hello World You have entered: 4 Hello World
cin.ignore() के सामान्य उपयोग
| उपयोग | कोड | व्यवहार |
|---|---|---|
| सिंगल कैरेक्टर स्किप | cin.ignore() | 1 कैरेक्टर इग्नोर करता है (डिफ़ॉल्ट n=1) |
| n कैरेक्टर्स स्किप | cin.ignore(n) | अधिकतम n कैरेक्टर्स इग्नोर करता है |
| डिलिमीटर तक स्किप | cin.ignore(n, '\n') | n कैरेक्टर्स या '\n' तक, जो पहले आए |
| पूरी लाइन क्लियर | cin.ignore(numeric_limits<streamsize>::max(), '\n') | वर्तमान लाइन के शेष को डिस्कार्ड करता है |
std::ws मैनिपुलेटर (वैकल्पिक)
व्हाइटस्पेस (न्यूलाइन सहित) स्किप करने के लिए:
cin >> x; getline(cin >> ws, str); // ws अग्रणी व्हाइटस्पेस खाता है