मैंने हाल ही में fstream :: eof() का उपयोग करके एक समस्या में भाग लिया। मैंने here से निम्नलिखित पंक्ति पढ़ी:std :: fstream ने EOF बिट को जिस तरह से सेट किया है?
फ़ंक्शन eof() संबंधित इनपुट फ़ाइल का अंत तक पहुंच गया है, तो गलत साबित होता है, अन्यथा झूठा।
और (गलती से) मान लिया गया कि इसका मतलब यह हुआ कि अगर मैंने fstream :: read() का उपयोग किया और फ़ाइल के अंत में पढ़ा, तो फ़ंक्शन eof() मुझे बताएगा।
for(int i = 0; i < max && !file.eof(); i++)
{
file.read(mything, sizeof(mything));
}
समस्या क्योंकि जो बाद में ऊपर लिंक पृष्ठ पर समझाया गया है की आया था (मैं शुरू में पढ़ने में विफल, भ्रामक पहले पैराग्राफ के लिए धन्यवाद):
तो मैं कुछ इस तरह (बहुत सामान्यीकृत) कियाइसके विपरीत, अगर अंतिम टोकन के बाद कोई सफेद स्थान होता है तो धारा ईओएफ स्थिति में नहीं जाती है, लेकिन एक और टोकन पढ़ने की कोशिश कर रहा है। इसलिए, ईओएफ ध्वज को ईओएफ तक सभी स्ट्रीम सामग्री को पढ़ने के उद्देश्य से लूप में एक परीक्षण के रूप में उपयोग नहीं किया जा सकता है। इसके बजाय, पढ़ने के प्रयास के बाद किसी को असफल स्थिति की जांच करनी चाहिए।
तो मैंने बदल दिया, और अब मेरा लूप file.eof() के बजाय file.fail() के खिलाफ जांचता है, और मैं समझता हूं कि कैसे eof() काम करता है। मेरा सवाल है, यह इस तरह क्यों काम करता है? क्या ऐसी स्थितियां हैं जहां यह वांछनीय है? ऐसा लगता है कि एक बार जब आप ईओएफ पास कर चुके हैं, तो आपने ईओएफ पास कर दिया है और ईओएफ() को सच होना चाहिए।
अद्यतन प्रतिक्रिया के लिए धन्यवाद, मैं मुझे मिल गया लगता है। एकमात्र ऑपरेशन जो मैं कर रहा हूं वह पढ़ा जाता है(), और मैं तुरंत असफल() की जांच करता हूं, इसलिए मुझे लगता है कि मैं ठीक हूं। अब, मेरा सवाल है, मैं eof() के लिए उपयोग करता हूं?
(int i = 0; i