Benutze <fstream> und std::getline(file, line) mit <string> zum zeilenweisen Lesen:
//: textfile.cpp: Text zeilenweise lesen - R.Richter 2011-05-22 /////////////////////////////////////////////////////////////// #include <iostream> #include <fstream> #include <string> int main() { std::string filename; std::cout << "Datei: "; std::cin >> filename; std::ifstream input(filename); if (!input) { std::cerr << "Datei beim Oeffnen der Datei " << filename << "\n"; return 1; } std::string line; while (std::getline(input, line)) { std::cout << line << '\n'; } return 0; }
Der Zeilenumbruch landet nicht in der Zeichenkette line.
Als "Wort" gilt jede Folge von Zeichen außer Leerzeichen, Tabulator und Zeilenumbruch (Leerraum = white space).
Zum wortweisen Lesen bindet man den operator>> in die Schleifenbedingung ein. Vorangehender Leerraum wird dabei verschluckt. Konnte kein Wort gelesen werden, endet die Schleife:
std::string word; while (input >> word) { // ... }
Die meisten Versuche, input.eof() in der Schleifenbedingung zu nutzen, funktionieren nicht. Überlege, was passiert, wenn Leerzeichen am Ende des Eingabestroms stehen?