दिलचस्प पोस्ट
एंड्रॉइड में एक छवि कैसे डाउनलोड और सहेज सकती है रूपांतरण प्रकार – हस्ताक्षरित इंट / चार से हस्ताक्षरित डायनेमिक मेमोरी एक्सेस केवल फ़ंक्शन के अंदर काम करता है चयन बॉक्स विकल्प पृष्ठभूमि रंग बदलने के लिए कैसे? .NET में उपलब्ध केवल एक पठन-रहित सामान्य शब्दकोश है? पाठ को डालने जहां कर्सर जावास्क्रिप्ट / jquery का उपयोग कर रहा है जब आप विश्वसनीय यूडीपी की आवश्यकता होती है तो आप क्या उपयोग करते हैं? IDisposable के साथ Excel इंटरऑप ऑब्जेक्ट साफ़ करें मैं init / dealloc में उद्देश्य सी 2.0 एक्सेसर्स का उपयोग क्यों नहीं करना चाहिए? सीडी में iTextSharp का उपयोग कर पीडीएफ सामग्री पढ़ना मेरे ऐप के लिए फ़ाइल साझाकरण को कैसे सक्षम किया जा सकता है? Std :: cin से एक पासवर्ड पढ़ना एक जावास्क्रिप्ट लूप के अंदर ईवेंट हैंडलर्स – एक क्लोजर की आवश्यकता है? युनिकोड स्ट्रिंग को स्ट्रिंग में पायथन में कनवर्ट करें (अतिरिक्त प्रतीकों वाले) सी # खिड़कियों एपीआई के माध्यम से फ़ाइल से थंबनेल प्राप्त करें

मूल_ओआईएस पर झंडे की शब्दावली

मैं खुद को rdstate() झंडे द्वारा बार-बार चकित कर rdstate()good() , bad() , eof() , fail() – और कैसे वे basic_ios::operator! में व्यक्त किए basic_ios::operator! , operator bool और operator void*

क्या कोई मुझे अपने दुख से बाहर कर सकता है और यह समझा सकता है, इसलिए मुझे कभी दोबारा सोचने की ज़रूरत नहीं है?

वेब के समाधान से एकत्रित समाधान "मूल_ओआईएस पर झंडे की शब्दावली"

तीन झंडे हैं जो त्रुटि राज्य का संकेत देते हैं:

  • badbit मतलब है कि धारा के साथ कुछ गलत हो गया है। यह एक बफर त्रुटि या स्ट्रीम में डेटा खिला रही है जो कुछ भी एक त्रुटि हो सकती है यदि यह ध्वज सेट है, तो यह संभव है कि आप स्ट्रीम का उपयोग नहीं कर रहे हैं।

  • failbit मतलब है कि धारा से निष्कासन या पढ़ना विफल (या आउटपुट स्ट्रीम के लिए एक लिखना या प्रविष्टि) और आपको उस विफलता से अवगत होना चाहिए।

  • eofbit अर्थ है इनपुट स्ट्रीम अपने समापन पर पहुंच गया है और पढ़ने के लिए कुछ भी नहीं बचा है ध्यान दें कि यह आपके द्वारा इनपुट स्ट्रीम से पढ़ने का प्रयास करने के बाद ही सेट किया गया है जो कि उसके अंत तक पहुंचा है (यानी यह तब सेट होता है जब कोई त्रुटि आती है क्योंकि आप उस डेटा को पढ़ने का प्रयास करते हैं जो वहां नहीं है)।

failbit भी कई परिचालनों द्वारा निर्धारित किया जा सकता है जो failbit तक पहुंचते हैं। उदाहरण के लिए, यदि केवल सफेद स्थान शेष स्ट्रीम में शेष है और आप एक int पढ़ने की कोशिश करते हैं, तो आप दोनों EOF तक पहुंचेंगे और आप int पढ़ने में असफल होंगे, इसलिए दोनों झंडे सेट हो जाएंगे।

fail() फ़ंक्शन का परीक्षण badbit || failbit badbit || failbit

good() फ़ंक्शन परीक्षण !(badbit || failbit || eofbit) यही है, एक धारा अच्छा है जब कोई भी बिट्स सेट नहीं हैं।

आप ios::clear() सदस्य फ़ंक्शन का उपयोग करके झंडे को रीसेट कर सकते हैं; यह आपको किसी भी त्रुटि झंडे को सेट करने की अनुमति देता है; डिफ़ॉल्ट रूप से (कोई तर्क नहीं के साथ), यह सभी तीन झंडे साफ करता है

धाराएं operator bool() ओवरलोड नहीं करतीं; operator void*() का उपयोग सुरक्षित बूल मुहावरों के कुछ हद तक टूटे हुए संस्करण को लागू करने के लिए किया जाता है। यदि यह badbit या failbit निर्धारित है, और अन्यथा गैर-रिक्त है, तो यह ऑपरेटर ओवरलोड नल देता है आप इसे किसी निष्कर्षण की सफलता के परीक्षण के मुहावरों के समर्थन के लिए उपयोग कर सकते हैं, जैसे किसी पाश या अन्य नियंत्रण प्रवाह वक्तव्य की स्थिति:

 if (std::cin >> x) { // extraction succeeded } else { // extraction failed } 

operator!() अधिभार operator void*() के विपरीत है operator void*() ; यह true रिटर्न करता true अगर badbit या failbit सेट हो और अन्यथा falseoperator!() अधिभार वास्तव में अब और आवश्यक नहीं है; यह पहले की तारीख से पहले ऑपरेटर ओवरलोड पूरी तरह से और लगातार समर्थन किया गया था ( एसबीआई का सवाल "क्यों एसटीडी :: बेसिकआईआईओएस ओपरल लॉजिकल एनैजेक्शन ऑपरेटर को ओवरलोड करता है?" )।

सी ++ 0x समस्या को हल करता है जिससे हमें सुरक्षित बूल मुहावरों का उपयोग करना पड़ता है, इसलिए सी ++ 0x में basic_ios बेस क्लास टेम्पलेट ओवरलोड operator bool() एक स्पष्ट रूपांतरण ऑपरेटर के रूप में करता है; इस ऑपरेटर का एक ही शब्दांकन मौजूदा operator void*()

जेम्स के उत्तर के अलावा, यह याद रखना महत्वपूर्ण है कि ये झंडे आपरेशन के परिणाम इंगित करते हैं, इसलिए जब तक आप एक प्रदर्शन नहीं करते हैं

ऐसा करने के लिए एक आम त्रुटि है:

 #include <fstream> #include <iostream> #include <string> int main() { std::ifstream file("main.cpp"); while (!file.eof()) // while the file isn't at eof... { std::string line; std::getline(file, line); // ...read a line... std::cout << "> " << line << std::endl; // and print it } } 

यहाँ समस्या यह है कि जब तक हम अंतिम पंक्ति प्राप्त करने की कोशिश करते हैं तब तक eof() सेट नहीं किया जाएगा, जिस बिंदु पर स्ट्रीम कहेंगे "नहीं, नहीं!" और इसे सेट करें इसका अर्थ है "सही" रास्ता:

 #include <fstream> #include <iostream> #include <string> int main() { std::ifstream file("main.cpp"); for (;;) { std::string line; std::getline(file, line); // read a line... if (file.eof()) // ...and check if it we were at eof break; std::cout << "> " << line << std::endl; } } 

यह चेक सही स्थान पर रखता है। यद्यपि यह बहुत अनियंत्रित है; सौभाग्य से हमारे लिए, std::getline लिए रिटर्न वैल्यू स्ट्रीम है, और स्ट्रीम में एक रूपांतरण ऑपरेटर होता है जो इसे बूलियन संदर्भ में जांचने की अनुमति देता है, fail() के मूल्य के साथ, जिसमें eof() शामिल है तो हम बस लिख सकते हैं:

 #include <fstream> #include <iostream> #include <string> int main() { std::ifstream file("main.cpp"); std::string line; while (std::getline(file, line)) // get line, test if it was eof std::cout << "> " << line << std::endl; }