bei der Ausgabe ein t zu viel!
-
Hi Leute,
1. Programm schreibt eine Datei names, sagen wir sigi.txt mit dem Inhalt: "Test".
2. Programm liest die Datei sigi.txt ein und gibt folgendes aus: "Testt".Frage: Wieso?
PS: Habe gerade mit CPP angefangen. Bin auf eure Hilfe angewiesen. Danke.
#include <iostream> #include <fstream> #include <string> using namespace std; int main(void) { ofstream of_test; string filename; cout << "please enter filename> "; cin >> filename; cout << endl; of_test.open(filename.c_str(), ios_base::out); if (!of_test) { cout << "open " << filename << " failed!" << endl; return(-1); } string tmp = "Test"; of_test << tmp; of_test.close(); ifstream if_in; if_in.open("sigi.txt", ios_base::in); if (!if_in) { cout << "open sigi.txt failed!" << endl; return(-1); } char buf = '\0'; while (!if_in.eof()) { // nicht geklärt: wieso wird tt am ende angezeigt??? if_in.get(buf); cout << buf; } if_in.close(); return(0); }
-
eof ist erst true wenn über das letzte Zeichen gelesen wurde.
Du liest das letzte t. eof == false. Danach versuchst Du erneut zu lesen. Es wird nichts in Dein Buffer geschrieben, aber eof auf true gesetzt.
Du gibst das "alte" Zeichen aus, danach greift erst die Abfrage nach eof.Wirf mal ein Blick in die FAQ: Dateien und Ströme.
Da findest Du von Hume sehr schön aufbereitete Informationen.
-
while (!if_in.eof()) { if_in.get(buf); cout << buf; }
Wie sollte ich dann die Schleife umformulieren, damit sie richtig formuliert?
Eine Lösung habe ich bereits; trotzdem möchte ich wissen, wie Ihr so eine Schleife formulieren würdet, die den Inhalt einer ganzen Datei ausgibt.PS: Meine Lösung möchte ich vorerst nicht Bekannt geben!
Danke
-
Den inhalt einer ganzen Datei kann man so ausgeben:
std::ifstream datei("t:\\test.txt",ios::binary); std::cout<<datei.rdbuf();
-
ich meine mit eof drin.
Danke für deine Bemühungen...