Test de la condition du flux : pourquoi l'utilisation de good() ou !eof() lit la dernière ligne deux fois
Lors de la tentative de lecture d'un fichier texte ligne par ligne en utilisant ifstream, l'utilisation de f.good() ou !f.eof() dans une boucle peut entraîner la lecture deux fois de la dernière ligne. Examinons la raison de ce comportement et explorons des solutions alternatives.
Comprendre les fonctions d'état du flux
good(), eof() et fail() sont l'état du flux fonctions qui indiquent l’état actuel du flux d’entrée. Cependant, ils ne prédisent pas le succès ou l'échec des futures opérations de saisie.
Raison de la lecture deux fois de la dernière ligne
Le problème se produit parce que good() et eof( ) ne reflètent pas nécessairement le résultat de la dernière opération d'entrée. Par exemple, !f.eof() ne garantit pas que la précédente getline() a réussi. À l'inverse, ne pas être à EOF n'implique pas que la dernière opération d'entrée a échoué.
Solution alternative : vérifier l'état du flux après l'opération d'entrée
Pour lire et traiter correctement les lignes, il est crucial de vérifier l'état du flux après avoir effectué l'opération de saisie :
if (getline(f, line)) { // Use line here } else { // Handle error or end of file }
Solution alternative : itérer avec Boucle
Une autre solution élégante consiste à utiliser une boucle qui itère jusqu'à ce que getline() échoue :
for (string line; getline(f, line);) { // Use line here }
Éviter la fonction good() mal nommée
Enfin, il est important de noter que good() est un terme abusif et n'équivaut pas à tester le flux lui-même. Il est recommandé d'utiliser les techniques décrites ci-dessus au lieu de s'appuyer sur good().
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!