2010-02-16 9 views
5

का उपयोग कर लूप में स्ट्रीम से सुरक्षित पढ़ने के लिए मैं लूप के अंदर std::getline का उपयोग करके स्ट्रीम से पढ़ना चाहता हूं।गेटलाइन

धारा मेरा मतलब है std::basic_iostream से विरासत में प्राप्त एक वर्ग है।

 
std::string line;    
for(;;){ 
     try{ 
      std::getline(myStreamObj, line); 
      if(line != ""){ 
       std::cout << line << std::endl; 
      } 
     } 
     catch(std::ios_base::failure& ex){ 
      std::cout << ex.what() << std::endl; 
     } 
    } 

मैं भी चाहता हूँ

eofbit failbit badbit

जैसे अन्य त्रुटि की स्थिति के खिलाफ जांच करने के लिए लेकिन मैं थोड़ा इसके बारे में उलझन में हूँ।

यदि इन स्थितियों में से कुछ स्थितियों की सेटिंग std::ios_base::failure जैसी किसी भी अपवाद को फेंक दिया गया है? इन 3 मामलों को कैसे संभालें? क्या मुझे अन्य तरीकों से जांच करनी है?

धन्यवाद AFG

उत्तर

2

आप अपवाद आप ios :: अपवाद का उपयोग कर इसे स्थापित करने की आवश्यकता के माध्यम से त्रुटियां पर कब्जा करना चाहते हैं:

सामान्य में हालांकि, यह execptions उपयोग करने के लिए नहीं है, लेकिन जैसे निर्माणों का उपयोग करना आसान है। अन्यथा एक अपवाद फेंक नहीं दिया जाएगा। आप यहां प्रलेखन देख सकते हैं: http://www.cplusplus.com/reference/iostream/ios/exceptions/

आप स्पष्ट रूप से आईओएस :: असफल(), ios :: bad() या ios :: eof() को भी कॉल कर सकते हैं। यहां डॉक्स: http://www.cplusplus.com/reference/iostream/ios/

6

डिफ़ॉल्ट रूप से iostreams जब त्रुटियां होती हैं अपवाद फेंक नहीं है। यदि आप उन्हें सक्षम करना चाहते हैं:

cout.execeptions(std::ios::badbit); 

बैडबिट सेट होने पर अपवाद सक्षम करेगा।

उन सब को सक्षम करने के लिए:

cout.execeptions(std::ios::badbit 
        | std::ios::eofbit 
        | std::ios::failbit); 

अपवाद फेंका प्रकार के होते हैं:

std::ios_base::failure 

जो std::exception से ली गई है।

while(std::getline(myStreamObj, line)) { 
    // process line 
} 
+0

आपके उत्तर के लिए धन्यवाद! मुझे इस स्थिति के बारे में पता नहीं था इसलिए यह उपयोगी आता है। क्या मैं आपको एक और छोटी जानकारी पूछ सकता हूं। यहां अपवाद क्यों अच्छी पसंद नहीं हैं? –

+0

@Abruzzo कई कारणों से - धीमे, आसानी से बहाली का समर्थन न करें, त्रुटियों को संभालने के लिए और कोड लिखने की आवश्यकता है। और आपके कोड को पढ़ने वाले अधिकांश लोग इस क्षेत्र में अपवाद * नहीं * की अपेक्षा करेंगे, इसलिए उन्हें समझने के लिए कोड कठिन लगेगा। –

संबंधित मुद्दे