Maison > développement back-end > C++ > Pourquoi l'utilisation de `good()` ou `!eof()` lit-elle deux fois la dernière ligne d'un fichier ?

Pourquoi l'utilisation de `good()` ou `!eof()` lit-elle deux fois la dernière ligne d'un fichier ?

Patricia Arquette
Libérer: 2024-12-16 03:27:11
original
859 Les gens l'ont consulté

Why Does Using `good()` or `!eof()` Read the Last Line of a File Twice?

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
}
Copier après la connexion

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
}
Copier après la connexion

É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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal