Jak sprawdzić koniec pliku przy użyciu funkcji std::getline
? Jeśli użyję eof()
, nie będę sygnalizować eof
, dopóki nie spróbuję odczytać poza końcem pliku.sprawdzanie ciągu znaków w ciąg :: getline
28
A
Odpowiedz
9
Wystarczy przeczytać, a następnie sprawdzić, że operacja odczytu udało:
std::getline(std::cin, str);
if(!std::cin)
{
std::cout << "failure\n";
}
Ponieważ awaria może być spowodowana różnymi przyczynami, można użyć funkcji eof
member aby zobaczyć to, co się stało, było rzeczywiście EOF:
std::getline(std::cin, str);
if(!std::cin)
{
if(std::cin.eof())
std::cout << "EOF\n";
else
std::cout << "other failure\n";
}
getline
zwraca strumień tak można napisać bardziej zwięźle:
if(!std::getline(std::cin, str))
39
Kanoniczna pętla odczyt w C++ jest:
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)
}
+1
Ta odpowiedź jest wspaniała. Jeśli potrzebujesz komunikatów o błędach, jest to (jedyna) droga. Naprawdę potrzeba czasu, aby to zrozumieć: http://gehrcke.de/2011/06/reading-files-in-c-using-ifstream-dealing-correctly-with-badbit-failbit-eofbit-and-perror/ –
Powiązane problemy
- 1. Sprawdzanie znaków specjalnych w ciągu znaków
- 2. ciąg znaków JQuery zawiera sprawdzanie
- 3. Sprawdzanie, czy ciąg znaków spełnia określony wzorzec.
- 4. Sprawdzanie ciągu znaków Pythona dla znaków ze znakami escape
- 5. Podział ciągu na ciąg znaków
- 6. Jak rozwinąć ciąg znaków w ciągu znaków w pythonie?
- 7. Sprawdzanie poprawności ciągu znaków w stosunku do USPS Skróty stanowe
- 8. Zwróć ciąg znaków w ciągu znaków na podstawie wyrażenia 'x = {(. *)}'
- 9. Sprawdzanie, czy ciąg znaków jest pusty
- 10. Skonstruuj oryginalny ciąg z uszkodzonego ciągu znaków
- 11. Konwersja z ciągu szesnastkowego na ciąg znaków
- 12. Dlaczego "ciąg znaków" jest uważany za uproszczoną wersję "ciągu znaków"?
- 13. Zastępowanie znaków od ciągu jeden do dwóch ciąg znaków
- 14. Wstaw ciąg znaków na początku kolejnego ciągu znaków
- 15. Przytnij ciąg znaków na podstawie długości ciągu znaków
- 16. Dopasowywanie sekwencji kolejnych znaków w ciągu znaków
- 17. Usuwanie białych znaków w ciągu znaków
- 18. sprawdzanie znaków
- 19. Sprawdzanie, czy ciąg znaków jest pusty w Kotlin
- 20. Sprawdzanie, czy ciąg znaków jest numeryczny w rzutce
- 21. Tłumaczenie przypisanego ciągu znaków
- 22. grep bez ciągu znaków
- 23. jak znaleźć najdłuższy ciąg w ciągu znaków [] używając LINQ
- 24. mysql/php: znajdź ciąg rozpoczynający się w ciągu znaków
- 25. Rozdzielanie ciągu znaków w C++
- 26. Parsowanie ciągu znaków
- 27. zawaleniem spacje w ciągu znaków
- 28. Usuwanie zduplikowanych znaków z ciągu znaków
- 29. Usuwanie znaków niealfanumerycznych z ciągu znaków
- 30. Formatowanie ciągu znaków na 10 znaków
że 'eof' nie jest zalecana jest prawdą, ale z innego powodu. Czytanie przeszłości EOF to * dokładnie * to, co robisz, gdy chcesz przetestować EOF, więc 'eof' działa dobrze w tym względzie. –