Wie überprüfe ich für das Ende der Datei mit der std::getline
Funktion? Wenn ich eof()
verwende, wird es eof
nicht signalisieren, bis ich versuche, über das Ende der Datei hinaus zu lesen.Prüfung auf eof in string :: getline
Antwort
Nur lesen und prüfen Sie, ob der Lesevorgang erfolgreich:
std::getline(std::cin, str);
if(!std::cin)
{
std::cout << "failure\n";
}
Da der Ausfall einer Reihe von Ursachen zurückgeführt werden kann, können Sie die eof
Member-Funktion verwenden, um zu sehen, was EOF passiert ist, war eigentlich:
std::getline(std::cin, str);
if(!std::cin)
{
if(std::cin.eof())
std::cout << "EOF\n";
else
std::cout << "other failure\n";
}
getline
liefert den Strom, so dass Sie mehr kompakt schreiben:
if(!std::getline(std::cin, str))
Die kanonische Leseschleife in C++ ist:
while (getline(cin, str)) {
}
if (cin.bad()) {
// IO error
} else if (!cin.eof()) {
// format error (not possible with getline but possible with operator>>)
} else {
// format error (not possible with getline but possible with operator>>)
// or end of file (can't make the difference)
}
Diese Antwort ist einfach großartig. Wenn Sie Fehlermeldungen benötigen, ist dies der (einzige) Weg. Es braucht wirklich Zeit, das herauszufinden: http://gehrcke.de/2011/06/reading-files-in-c-using-ifstream-dealing-correctly-with-badbit-failbit-eofbit-and-perror/ –
- 1. C Programm hängt bei EOF-Prüfung
- 2. C++ - Schnellausgabe auf getline (cin, string)
- 3. Programm stoppt nicht auf EOF
- 4. Wie zu ermitteln, ob es EOF bei Verwendung von getline() in C++ ist?
- 5. Getline setzt Programm auf Pause
- 6. Prüfung auf Änderungen Probleme
- 7. String.IsNullOrEmpty() Prüfung auf Leerzeichen
- 8. Warum kann ich getline ohne std :: getline aufrufen?
- 9. Warum wird getline (...) auf dem Bildschirm gedruckt?
- 10. Detecting EOF in C++ aus einer Datei zu STDIN umgeleitet
- 11. getline und file handling
- 12. git: leere Zeile auf EOF
- 13. Fehler bei std :: getline
- 14. Wie erkennt man EOF auf der Konsole in C#? Was gibt Console.ReadLine() bei EOF zurück?
- 15. Valgrind Prüfung auf Speicherleck in C
- 16. Benötigen mit getline helfen()
- 17. Wie mache ich "getline" von einer std :: string?
- 18. Verwenden von getline auf einer Zeichenfolge
- 19. Prüfung auf abgeleiteten Typ (C++)
- 20. Google Chrome Prüfung auf Caching
- 21. Prüfung auf NULL-Verweis in F #
- 22. Prüfung auf Ungleichheit in T-SQL
- 23. Prüfung auf klammert varchar in SQL Server
- 24. Warum seekg nicht mit getline funktioniert?
- 25. Std :: Getline entfernt Leerzeichen?
- 26. Ruby: Prüfung auf ostasiatische Breite (Unicode)
- 27. EOF-Zeichen in Bilddateien
- 28. Prüfung auf null innerhalb SQL-Abfrage
- 29. getchar() = EOF
- 30. Versprechen Prüfung in Winkel
Das 'eof' nicht empfohlen wird, ist wahr, aber aus einem anderen Grund. Das Lesen von EOF ist * genau * was Sie tun, wenn Sie EOF testen wollen, also funktioniert 'eof' gut in dieser Hinsicht. –