L'utilisation de fstream pour les opérations de saisie de fichiers implique souvent de vérifier l'état du flux pour déterminer quand arrêter la lecture. Cependant, l'utilisation de certains indicateurs d'état peut entraîner des problèmes inattendus, tels que la lecture deux fois de la dernière ligne. Cet article explore la cause sous-jacente et propose des solutions pour éviter ce problème.
Pourquoi la dernière ligne est lue deux fois
Le problème se pose lors de l'utilisation de good() ou ! Conditions eof() dans une boucle while qui utilise getline() pour lire les lignes d'un fichier. Voici pourquoi cela se produit :
Correction : Utilisez getline() valeur de retour pour vérifier la lecture réussie de la ligne :
while (getline(stream, line)) { // Use line here. }
Correction : Vérifiez si l'opération getline() est réussi avant de vérifier EOF :
if (getline(stream, line)) { // Use line here. } else if (stream.eof()) { // Handle end-of-file condition. } else { // Handle error condition. }
Bonnes pratiques
Pour éviter ces problèmes et traiter efficacement les lignes de fichiers, tenez compte des points suivants :
if (stream >> foo >> bar) { // Use foo and bar here. } else { // Handle error condition. }
for (string line; getline(stream, line);) { // Use line here. }
En suivant ces directives, vous pouvez éviter de lire deux fois la dernière ligne par inadvertance et garantir un traitement fiable des entrées de fichiers avec fstream.
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!