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
Libérer: 2025-01-02 19:11:40
original
146 Les gens l'ont consulté

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

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!

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