Maison >développement back-end >C++ >Comment éviter les doubles lectures lors de la lecture d'entiers à partir d'un fichier en C ?

Comment éviter les doubles lectures lors de la lecture d'entiers à partir d'un fichier en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-02 19:11:40183parcourir

How to Prevent Double Reads When Reading Integers from a File in C  ?

Lecture d'entiers à partir d'un fichier jusqu'à EOF : éviter les doubles lectures

Le code C fourni lit les entiers à partir d'un fichier texte jusqu'à la fin du fichier (EOF). Cependant, il lit la dernière ligne deux fois, ce qui entraîne une répétition dans la sortie. Cela se produit parce que :

  • Lors de la lecture du dernier entier (30 dans l'exemple) et de la vérification de l'EOF, la marque EOF reste non lue.
  • Dans l'itération suivante, le même entier ( 30) est toujours stocké dans le tampon d'entrée et EOF est correctement détecté.
  • L'entier est sorti deux fois : une fois à partir de l'itération précédente tampon et encore à partir de la vérification EOF actuelle.

Solution :

Pour résoudre ce problème, utilisez une boucle while qui se termine lors de la lecture d'EOF :

while (true) {
    int x;
    iFile >> x;
    if (iFile.eof()) break;
    cerr << x << endl;
}

Dans cette boucle :

  • L'entier est lu dans le buffer.
  • Si EOF est atteint, la boucle se termine.
  • Sinon, l'entier est généré en erreur standard.

Cette approche garantit que le dernier entier est imprimé une seule fois.

Remarque :

Le code original avait un autre potentiel problème : tentative de lecture d'un fichier vide. Cela peut être résolu en intégrant l'opération de lecture dans une instruction if qui vérifie si le flux est ouvert et non à EOF.

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!

Déclaration:
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