¿Cómo verifico el fin de archivo con la función std::getline
? Si uso eof()
, no señalizaré eof
hasta que intente leer más allá del final del archivo.comprobando eof en cadena :: getline
Respuesta
Basta con leer a continuación, compruebe que la operación de lectura tuvo éxito:
std::getline(std::cin, str);
if(!std::cin)
{
std::cout << "failure\n";
}
Desde el fracaso puede ser debido a una serie de causas, puede utilizar la función eof
miembro para ver que lo que ocurrió fue en realidad EOF:
std::getline(std::cin, str);
if(!std::cin)
{
if(std::cin.eof())
std::cout << "EOF\n";
else
std::cout << "other failure\n";
}
getline
devuelve la corriente para que pueda escribir de forma más compacta:
if(!std::getline(std::cin, str))
El bucle de lectura canónica en C++ es:
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)
}
Esta respuesta es simplemente genial. Si necesita mensajes de error, este es el (único) camino a seguir. Realmente toma su tiempo para resolver esto: http://gehrcke.de/2011/06/reading-files-in-c-using-ifstream-dealing-correctly-with-badbit-failbit-eofbit-and-perror/ –
- 1. fgetc, comprobando EOF
- 2. getline en istream y getline en basic_string
- 3. std :: getline() devuelve
- 4. comprobando la disponibilidad de datos antes de llamar a std :: getline
- 5. ¿Necesita ayuda con getline()
- 6. Detectando EOF en C
- 7. EOF Error en Imaplib
- 8. istream :: getline return type
- 9. getline no pide entrada?
- 10. com.android.ddmlib.InstallException: EOF
- 11. comprobando El último carácter de la cadena en c
- 12. Python equivalente a C++ getline()
- 13. ¿Cómo fuerzo eof en stdin?
- 14. ¿Cómo verificar EOF en Python?
- 15. (c = getchar())! = EOF en C#?
- 16. Valgrind dando errores con getline()
- 17. Use getline() sin configurar failbit
- 18. Problema al utilizar getline y strtok juntos en un programa
- 19. fgetc no identifica EOF
- 20. ¿EOF siempre es negativo?
- 21. Ifstream - Restablecer bit EOF
- 22. Comprobando las direcciones IP
- 23. vaya websockets eof
- 24. Constante ensambladora Delphi 'eof'
- 25. Tring para convertir una cadena str para su uso en std :: getline delimitador
- 26. copy_n o hasta eof?
- 27. comprobando invariantes en C++
- 28. comprobando memory_limit en PHP
- 29. C++ 11 regex: comprobando si la cadena comienza con regex
- 30. Comprobando un diccionario usando una cadena de notación de puntos
Ese 'No se recomienda eof' es cierto, pero por una razón diferente. Leer pasado EOF es * exactamente * lo que haces cuando quieres probar EOF, entonces 'eof' funciona bien en ese sentido. –