Maison > développement back-end > C++ > Comment tester correctement la fin d'un fichier lors de la lecture d'un flux de fichiers en C ?

Comment tester correctement la fin d'un fichier lors de la lecture d'un flux de fichiers en C ?

Linda Hamilton
Libérer: 2024-12-21 15:33:10
original
693 Les gens l'ont consulté

How to Correctly Test for End-of-File When Reading from a File Stream in C  ?

Test de l'état d'entrée du flux par rapport au succès futur

Lors de la lecture des entrées à l'aide de flux, il est essentiel de comprendre la différence entre tester l'état du flux et prédire la réussite des opérations futures.

Problème : Lecture de la Dernière Ligne Deux fois

ifstream f("x.txt");
string line;
while (f.good()) {
  getline(f, line);
  // Use line here.
}
Copier après la connexion

Dans ce code, la dernière ligne est lue deux fois car f.good() teste l'état actuel du flux, et non si getline() réussira. Une fois que getline() atteint l'EOF, f reste dans un "bon" état, donc la boucle continue même après la lecture de la dernière ligne.

Solution : tester le flux après l'opération

Au lieu de cela, vérifiez l'état du flux après avoir effectué l'opération de saisie :

ifstream f("x.txt");
string line;
while (getline(f, line)) {
  // Use line here.
}
Copier après la connexion

Utilisation alternative eof()

Bien qu'il ne soit pas recommandé d'utiliser eof() dans des conditions de boucle, voici une solution équivalente utilisant !f.eof() :

ifstream f("x.txt");
string line;
while (!f.eof()) {
  if (getline(f, line)) {
    // Use line here.
  } else {
    break;
  }
}
Copier après la connexion

Range -Boucle basée sur toutes les lignes

Pour lire et traiter toutes les lignes, utilisez une boucle basée sur une plage loop :

ifstream f("x.txt");
for (std::string line; getline(f, line);) {
  process(line);
}
Copier après la connexion

Good vs Stream State

Notez que f.good() est mal nommé. Cela n'indique pas vraiment la « bonté » du flux, mais renvoie plutôt vrai lorsque le flux n'est pas dans un état « d'échec » ou de « mauvais ». Testez toujours le flux lui-même (c'est-à-dire vérifiez son état d'échec inversé) après avoir effectué des opérations d'entrée pour garantir le succès.

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