मैं सी ++ में सिने बफर को कैसे साफ़ करूं?मैं सिने बफर कैसे फ्लश कर सकता हूं?
उत्तर
संभवत:
std::cin.ignore(INT_MAX);
इस में पढ़ सकते हैं और उपेक्षा होगा सब कुछ EOF
तक। इसके अलावा '\n'
एक लाइन की अनदेखी करने)
: (आप भी एक दूसरा तर्क जो चरित्र जब तक (पूर्व पढ़ने के लिए है की आपूर्ति कर सकते हैं। आप शायद एक क्या करना चाहते हैं:। धारा राज्य पुनर्स्थापित करने के लिए इससे पहले कि यह बहुत std::cin.clear();
निम्नलिखित काम करना चाहिए:
cin.flush();
कुछ सिस्टम यह उपलब्ध नहीं है पर और फिर आप उपयोग कर सकते हैं:
cin.ignore(INT_MAX);
मैन्युअल रूप से एक लूप क्यों लिखते हैं जब आप पढ़ सकते हैं INT_MAX वर्णों को अनदेखा करते हैं जब तक कि यह ईओएफ (दूसरे पैरामीटर का डिफ़ॉल्ट मान) तक नहीं पहुंच जाता। –
आप सही हैं :) –
गुन्नर, इस मामले को प्रतिबिंबित करने के लिए आपकी पोस्ट को संपादित करने के लिए बेहतर हो सकता है, बस मामले में। –
मैं सी संस्करणों के ऊपर सी ++ आकार की कमी पसंद करेंगे:
// Ignore to the end of file
cin.ignore(std::numeric_limits<std::streamsize>::max())
// Ignore to the end of line
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')
अधिक महत्वपूर्ण बात यह है कि मूल्य अलग हो सकते हैं! (स्ट्रीमसाइज int होना आवश्यक नहीं है) –
क्या आप कृपया एक उदाहरण उद्धृत कर सकते हैं जहां हमें फ़ाइल के अंत में अनदेखा करने की आवश्यकता है क्योंकि यदि मैं 'cin' का उपयोग करता हूं और 'cin' बफर को फ्लश करने के लिए ऊपर दिए गए पहले कथन का उपयोग करता हूं, तो यह जब तक मैं 'ctrl + d' दबाकर' EOF' दर्ज नहीं करता तब तक इनपुट के लिए संकेत जारी रहता है? – ajay
@ajay: नहीं। ऐसा कुछ है जिसे आपको तय करने की आवश्यकता होगी। मैं केवल यह बता रहा हूं कि उपर्युक्त क्या करेगा। –
मैं पसंद करते हैं:
cin.clear();
fflush(stdin);
एक परीक्षा है जहां cin.ignore बस इसे काट नहीं है, लेकिन मैं इस समय इस बारे में नहीं सोच सकता। कुछ समय पहले जब मुझे इसका इस्तेमाल करने की आवश्यकता थी (मिंगव के साथ)।
हालांकि, मानक के अनुसार fflush (stdin) अपरिभाषित व्यवहार है। fflush() केवल आउटपुट स्ट्रीम के लिए है। Fflush (stdin) केवल विंडोज़ पर अपेक्षित काम करता है (कम से कम जीसीसी और एमएस कंपाइलर्स के साथ) as an extension to the C standard।
तो, यदि आप इसका उपयोग करते हैं, तो आपका कोड पोर्टेबल नहीं होगा।
Using fflush(stdin) देखें।
इसके अलावा, एक विकल्प के लिए http://ubuntuforums.org/showpost.php?s=9129c7bd6e5c8fd67eb332126b59b54c&p=452568&postcount=1 देखें।
एफएफएलश (stdin); अनिर्धारित व्यवहार (सी प्रोग्रामिंग भाषा में) है, स्पष्ट रूप से एक वैध, कामकाजी क्लज की आपूर्ति के लिए 7.18.5.2/2 – Cubbi
+1 में स्पष्ट रूप से कहा गया है। कुछ लोगों के पास नौकरियां हैं अन्य के मानकों हैं। – Mikhail
@ मिखाइल: आपके काम में मानक अनुपालन कोड लिखना शामिल होना चाहिए। मैं भविष्य में लिखे गए किसी भी चीज का उपयोग करने से बचना सुनिश्चित करूँगा। –
कैसे के बारे में:
cin.ignore(cin.rdbuf()->in_avail());
स्ट्रीमबफ का in_avail() फ़ंक्शन अविश्वसनीय है, और कई कार्यान्वयन शून्य वापस आते हैं। देखें: https://connect.microsoft।कॉम/विजुअल स्टूडियो/फीडबैक/विवरण/50 9 337/वीसी -8-9-एसस्ट्रीम-बेसिक-स्ट्रीमबफ-स्पूट-स्पुत-डॉट-एन्हांसमेंट-जीकैंट gnu's libC++ समान –
int i;
cout << "Please enter an integer value: ";
// cin >> i; leaves '\n' among possible other junk in the buffer.
// '\n' also happens to be the default delim character for getline() below.
cin >> i;
if (cin.fail())
{
cout << "\ncin failed - substituting: i=1;\n\n";
i = 1;
}
cin.clear(); cin.ignore(INT_MAX,'\n');
cout << "The value you entered is: " << i << " and its double is " << i*2 << ".\n\n";
string myString;
cout << "What's your full name? (spaces inclded) \n";
getline (cin, myString);
cout << "\nHello '" << myString << "'.\n\n\n";
cin.clear();
fflush(stdin);
यह केवल बात यह है कि मेरे लिए काम किया जब कंसोल से पढ़ने था। हर दूसरे मामले में यह या तो \ n की कमी के कारण अनिश्चित काल तक पढ़ा जाएगा, या बफर में कुछ रहेगा।
संपादित करें: मुझे पता चला कि पिछले समाधान ने चीजों को और भी खराब कर दिया है। यह एक हालांकि, काम करता है:
cin.getline(temp, STRLEN);
if (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
#include <stdio_ext.h>
और उसके बाद कार्य का उपयोग
__fpurge(stdin)
cin.get()
(, शायद हालांकि प्राथमिकता नहीं दी, क्योंकि यह भ्रामक और शायद मनमौजी है) स्वचालित रूप से अजीब तरह से पर्याप्त यह फ्लश करने के लिए लगता है।
एक अन्य संभावित (मैनुअल) समाधान
cin.clear();
while (cin.get() != '\n')
{
continue;
}
है तो यह काम आया मैं Clion साथ fflush या cin.flush() का उपयोग नहीं कर सकते।
मेरे लिए अनंत लूप है। – StarWind0
यह केवल तभी काम कर रहा है जब रेखा का अंत हो, अन्यथा अनंत लूप –
मुझे इसके दो समाधान मिल गए हैं। जब यह एक नया ऑनलाइन करने के लिए हो जाता है
std::getline(std::cin, yourString);
... कि इनपुट धारा को छोड़ दिया जाएगा:
पहले, और सबसे सरल, उदाहरण के लिए std::getline()
उपयोग करने के लिए है। इस फ़ंक्शन here के बारे में और पढ़ें।
एक अन्य विकल्प सीधे को छोड़ देता है कि धारा यह है ...
#include <limits>
// Possibly some other code here
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
गुड लक!
सबसे आसान तरीका:
cin.seekg(0,ios::end);
cin.clear();
यह सिर्फ CIN सूचक stdin स्ट्रीम और cin.clear() सभी त्रुटि झंडे को साफ करता है के अंत में इस तरह के EOF ध्वज के रूप में की स्थिति।
- 1. मैं टीएसक्यूएल में प्रिंटर बफर कैसे फ्लश कर सकता हूं?
- 2. मैं सिने को कैसे स्वच्छ कर सकता हूं?
- 3. मैं एक अपेक्षित स्क्रिप्ट में इनपुट बफर कैसे फ्लश कर सकता हूं?
- 4. vim - मैं बफर कैसे खोज सकता हूं?
- 5. मैं बफर में यादृच्छिक सॉर्ट लाइन कैसे कर सकता हूं?
- 6. मैं स्ट्रिंग/बफर का अक्षर कैसे प्राप्त कर सकता हूं?
- 7. मैं बफर ओवरफ़्लो कैसे आ सकता हूं?
- 8. मैं आउटपुट फ्लश करने के लिए आईआईएस 7 को कैसे मजबूर कर सकता हूं?
- 9. मैं आउटपुटस्ट्रीम को कैसे कार्यान्वित कर सकता हूं जिसे मैं रिवाइंड कर सकता हूं?
- 10. मैं एक अस्थायी बफर कैसे खोल सकता हूं
- 11. मैं x86 विंडोज़ में सीपीयू कैश फ्लश कैसे कर सकता हूं?
- 12. मैं आईफोन पर ओपनजीएल ईएस में स्टैंसिल बफर के बिना प्रतिबिंब कैसे प्रस्तुत कर सकता हूं?
- 13. मैं एक नया बफर जल्दी से खोलने के लिए emacs कैसे प्राप्त कर सकता हूं?
- 14. मैं सॉकेट यूडीपी के नीचे बफर आकार कैसे सेट कर सकता हूं? सी #
- 15. मैं अपने जावा इनपुट/आउटपुट/फ़ाइल धाराओं को ठीक से कैसे बफर कर सकता हूं?
- 16. मैं Emacs 23 में दाईं ओर के बजाय नीचे संकलन बफर कैसे प्राप्त कर सकता हूं?
- 17. मैं ऑडियो बफर को सीधे इसे चलाने के लिए कैसे स्थानांतरित कर सकता हूं
- 18. मैं संकलन बफर को अंत में बिंदु कैसे प्राप्त कर सकता हूं?
- 19. ट्विस्ट के twisted.web कक्षाओं का उपयोग करके, मैं अपने आउटगोइंग बफर कैसे फ़्लश कर सकता हूं?
- 20. अनुरोध मॉड्यूल का उपयोग करके मैं एक HTTP प्रतिक्रिया कैसे बफर कर सकता हूं?
- 21. मैं कैसे परीक्षण कर सकता हूं: RSpec
- 22. मैं गिट टैग कैसे कर सकता हूं?
- 23. मैं वेबटेस्ट कैसे विफल कर सकता हूं?
- 24. मैं जीसी परीक्षण कैसे कर सकता हूं?
- 25. मैं प्रतिनिधि कैसे प्राप्त कर सकता हूं?
- 26. emacs डीबगर: मैं चरण-दर-चरण कैसे कर सकता हूं?
- 27. PHP त्रुटि: ob_flush() [ref.outcontrol]: बफर फ्लश करने में विफल रहा।
- 28. मैं थोक खोज कैसे कर सकता हूं और पर्ल के साथ प्रतिस्थापित कैसे कर सकता हूं?
- 29. मैं एक फ़ाइलस्ट्रीम लॉक अनलॉक कैसे कर सकता हूं?
- 30. मैं यह कैसे सुनिश्चित कर सकता हूं कि मैं php
(पुराना मुझे पता है) नाम से पहले साफ़ करें, इसलिए स्ट्रीम को एक अच्छी स्थिति में रखा गया है जहां यह अपने बफर पर काम कर सकता है। – GManNickG
धन्यवाद, जीएमएन! क्या यह गलत तरीका था, पहले, और मेरी गलती की तलाश में कुछ समय बिताया। – balu
@GManNickG, बस जवाब तय किया। – bwDraco