¿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. Comprobando si la cadena está vacía
- 6. ¿Necesita ayuda con getline()
- 7. Detectando EOF en C
- 8. EOF Error en Imaplib
- 9. istream :: getline return type
- 10. getline no pide entrada?
- 11. com.android.ddmlib.InstallException: EOF
- 12. comprobando El último carácter de la cadena en c
- 13. Python equivalente a C++ getline()
- 14. ¿Cómo fuerzo eof en stdin?
- 15. ¿Cómo verificar EOF en Python?
- 16. (c = getchar())! = EOF en C#?
- 17. Valgrind dando errores con getline()
- 18. Use getline() sin configurar failbit
- 19. Problema al utilizar getline y strtok juntos en un programa
- 20. fgetc no identifica EOF
- 21. ¿EOF siempre es negativo?
- 22. Ifstream - Restablecer bit EOF
- 23. Comprobando las direcciones IP
- 24. vaya websockets eof
- 25. Constante ensambladora Delphi 'eof'
- 26. Tring para convertir una cadena str para su uso en std :: getline delimitador
- 27. copy_n o hasta eof?
- 28. comprobando invariantes en C++
- 29. comprobando memory_limit en PHP
- 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. –