2013-05-16 7 views
5

पढ़ने के लिए छोड़ दिया गया है, यह जांचने का कोई तरीका है कि किसी भी अक्षर को पढ़ने के लिए ifstream में छोड़ा गया है या नहीं, यदि हां, तो मैं यह कैसे कर सकता हूं। यदि आप निश्चित रूप से जानते हैं कि यह संभव नहीं है, तो कृपया मुझे बताएं।सी ++ std :: ifstream: जांचें कि क्या charaters को

संपादित करें: मैंने अपना प्रश्न अधिक सामान्य होने के लिए बदल दिया।

+0

कुछ हटाए गए टिप्पणियों में आपने अवरोधन का उल्लेख किया है। तो, स्पष्ट होने के लिए, अवरुद्ध किए बिना ऐसा करने का कोई तरीका नहीं है। –

उत्तर

4

प्राप्त करने के लिए क्या आप संपादन के बाद के बारे में पूछ रहे हैं, तो आप peek() फ़ंक्शन का उपयोग कर सकते हैं:

को देखते हुए एक std::ifstreamf

if(f && f.peek() == EOF) 
     std::cout << "Nothing left to read\n"; 
    else 
     std::cout << "There is something to read or the stream is bad\n"; 

लेकिन ध्यान रखें कि यह एक 'अधिक सामान्य' सवाल नहीं है कहा जाता है, यह एक अलग सवाल (अर्थात, अपने मूल प्रश्न wou को यह लागू करने के है एलडी एक त्रुटि हो)

+0

मैंने सोचा कि यह वही प्रश्न है क्योंकि मैं सिर्फ यह जानना चाहता था कि पढ़ने के लिए वर्ण शेष हैं या नहीं। मेरे प्रारंभिक प्रश्न में पोस्ट की गई सभी चीजें यह बताने के लिए थीं कि मैं यह जानकारी क्यों लेना चाहूंगा: क्योंकि मैं जानना चाहता हूं कि पढ़ना निष्पादित करना बंद कर देगा या नहीं, जिसे मैंने सोचा था कि सवाल पूछने का कारण ही था और सवाल का हिस्सा नहीं था । जैसा कि यह पता चला है, मेरी समस्या को हल करने के लिए यह जानकारी आवश्यक है, इसलिए मुझे एक और प्रश्न पूछना चाहिए था। तो मैं सवाल छोड़ दूंगा क्योंकि मैंने पहले इसका इरादा किया था (जैसा कि अब है) और एक नया पूछने पर विचार करें। – FSMaxB

+0

@FSMaxB जैसा कि म्यूइंग डक बताता है, अवरुद्ध किए बिना ऐसा करने का कोई तरीका नहीं है, यानी, वास्तव में पढ़ने या विफल होने का प्रयास करने के बिना, ** संबंधित वर्ण अनुक्रम ** के अगले चरित्र (आपके द्वारा उल्लिखित कुछ हटाए गए संस्करण में सीरियल पोर्ट) बफर में है जो ifstream ऑब्जेक्ट के अंदर मौजूद है। Peeked चरित्र अपठित रहेगा, तो ifstream से अगला पढ़ा इसे वापस कर देगा, लेकिन यह बाहरी डिवाइस से धारा में आने के बाद ही होगा। – Cubbi

2

आप अपने while हालत में पढ़ने आपरेशन रखना चाहिए:

while(stream >> buffer) { 
    ... 

जब तक धारा खाली है या एक और त्रुटि तब होती है पढ़ा जाएगा कि।

... लेकिन अगर आप वास्तव में एक समय में एक चरित्र को पढ़ने के लिए कोशिश कर रहे हैं, तो आप इस पढ़ना चाहिए: Reading a single character from an fstream?

+0

स्ट्रीम >> बफर हमेशा अवरुद्ध होता है, इससे कोई फर्क नहीं पड़ता कि इसे कहां रखा जाए। – FSMaxB

+0

आपके लिंक में समाधान भी अवरुद्ध है। – FSMaxB

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