Mögliche Duplizieren:
Reading from text file until EOF repeats last line
c++ EOF running one too many times?Warum C++ ifstream die Datei mit doppelten Datensätzen lesen
ich eine einfache c schreibe ++ Code eine binäre Datei lesen und schreiben, aber ich festgestellt, dass der ifstream den Datensatz zweimal lesen wird. Ich weiß nicht, wie dies geschieht, aber ich versuche, den Code mit mingw32 in Windows und Linux, den gleichen Fall
ofstream outfile;
int data[5];
outfile.open("abc.out", ios::out | ios::trunc | ios::binary);
data[0] = data[1] = 1;
data[2] = data[3] = 2;
data[4] = -1;
cout << "ORIGINAL DATA:" << data[0] << " " << data[1] << " " << data[2] << " " << data[3] << " " << data[4] << endl << endl;
outfile.write((char *)&data[0], 5*sizeof(int));
outfile.close();
ifstream infile;
infile.open("abc.out", ios::in | ios::binary);
data[0] = data[1] = data[2] = data[3] = data[4] = 0;
while (!infile.eof())
{
infile.read((char *)&data[0], 5*sizeof(int));
cout << data[0] << " " << data[1] << " " << data[2] << " " << data[3] << " " << data[4] << endl;
}
hier zu kompilieren ist die Ausgabe
ORIGINALDATEN: 1 1 2 2 -1
1 1 2 2 -1
1 1 2 2 -1
'infile.eof()' gibt nur true * nach * nicht lesen, so dass die Schleife einmal zu viel ausgeführt wird. –
Danke Bo Persson, aber ich verstehe immer noch nicht, wie ich das beheben kann. Lesen "Lesen von Textdatei, bis EOF die letzte Zeile wiederholt", versuche ich den folgenden Code while (wahr) { ... wenn (infile.eof()) zu brechen; } funktioniert aber immer noch nicht – user1285419
@user - Sie können für eof testen, oder überprüfen Sie den Rückgabewert von 'lesen' (Hinweis, Hinweis!), Bevor Sie sich entscheiden, zu cout schreiben. –