Dies ist der Beispielcode aus 17 Kapitel (17.5.3) der C++ Grundierung 5th Edition Buch.C++ - Primer 5th edition Kapitel 17.5.3 fstream legt keine neue Zeile
int main(void) {
fstream inOut("test.txt", fstream::ate | fstream::in | fstream::out);
if (!inOut)
{
cerr << "Unable to open file!" << endl;
return EXIT_FAILURE;
}
auto end_mark = inOut.tellg();
inOut.seekg(0, fstream::beg);
size_t cnt = 0;
string line;
while (inOut && inOut.tellg() != end_mark && getline(inOut, line))
{
cnt += line.size() + 1;
auto mark = inOut.tellg();
inOut.seekg(0, fstream::end);
inOut << cnt;
if (mark != end_mark)
{
inOut << " ";
}
inOut.seekg(mark);
}
inOut.seekg(0, fstream::end);
inOut << "\n";
return 0;
}
Der Inhalt der Datei test.txt
ist:
abcd
efg
hi
j
<This is a blank new line>
Der Punkt ist, wenn diese Datei mit einer Leerzeile endet, dieser Code funktioniert, wie es erwartet wird. In einem anderen Wort, es wird die Datei in dem ändern:
abcd
efg
hi
j
5 9 12 14
<This is a blank new line>
Aber, wenn die Datei wird ausgegeben, nicht mit einer leeren neuen Zeile enden wie folgt aus:
abcd
efg
hi
j5 9 12
Beachten Sie, dass diese Datei endet nicht mit einer neuen Zeile. Meine Frage ist, wo ist die leere neue Zeile? Afterall gibt es den Code
inOut << "\n";
Es sollte auf jeden Fall eine neue leere Zeile setzen. Wo ist falsch?
Getestet. Arbeite wie ein Zauber. :) Ich wiederhole das Kapitel 8 (8.1.2), es erwähnt dies. – callofdutyops