निम्नलिखित सी ++ कोड एक ifstream वस्तु का उपयोग करता है एक पाठ फ़ाइल से पूर्णांकों को पढ़ने के लिए (जो प्रत्येक पंक्ति में एक संख्या है) जब तक यह EOF हिट को दोहराता है। यह अंतिम पंक्ति पर दो बार पूर्णांक क्यों पढ़ता है? इसे कैसे ठीक करें?EOF जब तक पाठ फ़ाइल से पढ़ना अंतिम पंक्ति
कोड:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream iFile("input.txt"); // input.txt has integers, one per line
while (!iFile.eof())
{
int x;
iFile >> x;
cerr << x << endl;
}
return 0;
}
input.txt:
10
20
30
आउटपुट:
10
20
30
30
नोट: कोड स्निपेट को छोटा रखने के लिए मैंने सभी त्रुटि जांच कोड छोड़ दिए हैं। उपर्युक्त व्यवहार विंडोज (विजुअल सी ++), साइगविन (जीसीसी) और लिनक्स (जीसीसी) पर देखा जाता है।
'जबकि (iFile >> x)' का उपयोग करें। यह पूर्णांक पढ़ता है और स्ट्रीम देता है। जब एक धारा का उपयोग बूल वैल्यू के रूप में किया जाता है तो यह देखने के लिए जांच करता है कि स्ट्रीम मान्य है या नहीं। मान्य मतलब है eof() और खराब() दोनों झूठे हैं। http://stackoverflow.com/questions/21647/c-reading-from-text-file-until-eof-repeats-last-line#21666 –
समान भावना के रूप में टिप्पणी: 'जबकि (सत्य)' के बजाय, यह लिखने के लिए बेहतर लगता है 'file (ood.good)) ' – PHF
यदि आप सुनिश्चित नहीं हैं कि फ़ाइल की त्रुटि या अंत तक फ़ाइल को कैसे पढ़ा जाए, तो इस आलेख को पढ़ें (बहुत अच्छी व्याख्या) https://gehrcke.de/2011/06/रीडिंग-फाइल-इन-सी-उपयोग-इस्टस्ट्रीम-डीलिंग-सही-बैडबिट-असफल-ईफिट-एंड-पेरर/ – stviper