Problem mit ifstream.getline()
-
Ich lese alle Zeile hintereinander ein und speichere sie in einen Deque:
char *buffer = new char[1024]; while(fin.getline(buffer,1024)) { std::cout << buffer << std::endl; Datei.push_back(buffer); }Wenn jetzt aber in der Datei eine Zeile länger als 1024 Zeichen ist, bricht das Programm ab und im deque sind nur noch die Zeilen vor dieser Zeile. Wie kann ich machen, das die entsprechende Zeile trotzdem eingelesen wird, allerdings, dass sie nach 1024 zu ende ist (oder so was, auf jeden fall nicht, dass das programm dann abbricht)?
mfg.
-
Probier mal dass:
char *buffer = new char[1024]; while(fin.getline(buffer,1024)) { std::cout << buffer << std::endl; Datei.push_back(buffer); if (fin.fail()) { std::cout << "Zeile > 1024" << endl; fin.clear(); } }Liest fin nämlich die angegebene Anzahl Zeichen und ist noch nicht auch ein Zeilenende gestoßen, wird das failbit gesetzt. Ich denke deshalb macht er nicht mehr weiter.
-
std::string buffer; while(std::getline(fin, buffer)) { std::cout << buffer << std::endl; Datei.push_back(buffer); }Tommi
-
tntnet schrieb:
std::string buffer; while(std::getline(fin, buffer)) { std::cout << buffer << std::endl; Datei.push_back(buffer); }Tommi
Stimmt, das geht. Aber warum steht das nicht in der Referenz???
Naja, andere frage: Ich möchte bis zu einem bestimmten zeichen auslesen.
while(fin.get(buffer,1024,'-')) { Datei.push_back(buffer); }Aber sobald er auf das zeichen trifft, bricht die schleife ab, also er führt die schleife nur einmal aus. Warum das denn?
mfg.
-
Keiner eine Idee? Denn das Problem bereitet mir gerade starke Kopfschmerzen, weil ich da einfach nicht weiter komme.
mfg.