Gestion de l'état du flux : éviter la double lecture de la dernière ligne
Lors de la lecture d'un fichier à l'aide d'ifstream, il est essentiel de gérer correctement l'état du flux pour éviter un comportement inattendu, comme lire deux fois la dernière ligne.
Pourquoi la double lecture Se produit
L'utilisation de f.good() ou !f.eof() dans la condition de boucle peut entraîner la lecture double de la dernière ligne. En effet :
À la fin du fichier, il peut y avoir une ligne incomplète ou mal formée qui provoque l'échec de getline. Si f.good() ou !f.eof() est utilisé dans la condition de boucle, la boucle continue même après l'échec de getline, entraînant la relecture de la dernière ligne valide.
Corriger l'état du flux Gestion
Pour éviter ce problème, l'état du flux doit être vérifié après avoir effectué l'opération de saisie souhaitée. Cela peut être fait en utilisant les techniques suivantes :
Après getline :
if (getline(stream, line)) { use(line); } else { handle_error(); }
Après Operator>> :
if (stream >> foo >> bar) { use(foo, bar); } else { handle_error(); }
Pour lire et traiter toutes les lignes, la construction de boucle suivante est recommandée :
for (std::string line; getline(stream, line);) { process(line); }
Cette boucle se termine automatiquement lorsque getline ne parvient pas à lire une autre ligne.
Remarque sur good()
La fonction good() peut être nommée de manière trompeuse. Cela indique seulement qu'aucune erreur n'a été rencontrée jusqu'à présent, mais cela n'implique pas que la prochaine opération réussira. Par conséquent, il n'est généralement pas recommandé d'utiliser good() pour prédire le résultat des futures opérations d'entrée.
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!