Comment vérifier la fin d'un fichier à l'aide de la fonction std::getline
? Si j'utilise eof()
cela ne signalera pas eof
tant que je n'essaierai pas de lire au-delà de la fin du fichier.
La boucle de lecture canonique en C++ est:
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)
}
Il suffit de lire puis de vérifier que l'opération de lecture a réussi:
std::getline(std::cin, str);
if(!std::cin)
{
std::cout << "failure\n";
}
Étant donné que l'échec peut être dû à un certain nombre de causes, vous pouvez utiliser la fonction membre eof
pour voir ce qui s'est passé était réellement EOF:
std::getline(std::cin, str);
if(!std::cin)
{
if(std::cin.eof())
std::cout << "EOF\n";
else
std::cout << "other failure\n";
}
getline
renvoie le flux pour que vous puissiez écrire de manière plus compacte:
if(!std::getline(std::cin, str))