के बीच का अंतर cin.ignore
और cin.sync
के बीच क्या अंतर है?cin.ignore और cin.sync
उत्तर
cin.ignore
निर्दिष्ट वर्ण तक वर्णों को छोड़ दें, या जब तक कि डिलीमीटर तक पहुंच न जाए (यदि शामिल हो)। यदि आप इसे बिना किसी तर्क के कहते हैं, तो यह इनपुट बफर से एक वर्ण को त्याग देता है।
उदाहरण के लिए, cin.ignore (80, '\n')
या तो 80 वर्णों को अनदेखा कर देगा, या जितनी बार इसे एक नई लाइन पर हिट नहीं किया जाता है।
cin.sync
इनपुट बफर से सभी अपठित वर्णों को त्याग देता है। हालांकि, प्रत्येक कार्यान्वयन में ऐसा करने की गारंटी नहीं है। इसलिए, यदि आप स्थिरता चाहते हैं तो ignore
बेहतर विकल्प है।
cin.sync()
बस यह बताना होगा कि क्या बचा है।
cin.ignore (std::numeric_limits<std::streamsize>::max(),'\n'); //wait for newline
//cin.get()
:
cin.sync(); //discard unread characters (0 if none)
cin.get(); //wait for input
cin.ignore()
और cin.get()
के साथ, इस मिश्रण का एक सा हो सकता है: केवल उपयोग मैं sync()
कि ignore
के साथ नहीं किया जा सकता है के लिए के बारे में सोच सकते हैं system ("PAUSE");
के लिए एक स्थानापन्न है
यदि कोई नई लाइन छोड़ी गई थी, तो बस ignore
डालने से यह प्रतीत होता है। हालांकि, यदि कोई नई लाइन नहीं है तो दोनों को दो इनपुट की प्रतीक्षा करनी होगी। जो भी पढ़ा नहीं जाता है उसे छोड़कर उस समस्या को हल करता है, लेकिन फिर, लगातार नहीं है।
क्या आप मुझे विशिष्ट कार्यान्वयन दिखा सकते हैं जो cin.sync सुरक्षित नहीं है! – 5fox
@ 5fox: मैं आपको कार्यान्वयन दिखा सकता हूं जहां यह कोई काम नहीं करता है: http://ideone.com/AR8lB –
अनदेखा() को सिने या सिने के बाद बुलाया जाना चाहिए? विशिष्ट होने के लिए, पहली बार जब मैं सिने के लिए जाता हूं, तो क्या मुझे बफर में अवांछित डेटा फ्लश करने की ज़रूरत है? या जब मुख्य प्रवेश किया जाता है तो कार्यक्रम सब कुछ फ्लश करेगा? लेकिन मैंने जो देखा वह यह है कि अगर हम अनदेखा करते हैं(), यह पहली बार कुछ गैर सफेद अंतरिक्ष चरित्र की प्रतीक्षा करता है। – Rajesh