Maison > développement back-end > C++ > Comment la fonction `ifstream::eof()` de C fonctionne-t-elle vraiment avec `get()` et l'opérateur d'extraction ?

Comment la fonction `ifstream::eof()` de C fonctionne-t-elle vraiment avec `get()` et l'opérateur d'extraction ?

Susan Sarandon
Libérer: 2024-11-29 18:48:11
original
457 Les gens l'ont consulté

How Does C  's `ifstream::eof()` Function Really Work with `get()` and the Extraction Operator?

Comprendre la fonction eof() d'ifstream

La fonction eof() de la classe ifstream joue un rôle crucial dans les opérations de saisie de fichiers en C . Cependant, son comportement peut parfois être déroutant, notamment en ce qui concerne la fonction get().

Considérez l'exemple fourni :

#include <iostream>
#include <fstream>

int main() {
    std::fstream inf( "ex.txt", std::ios::in );
    while( !inf.eof() ) {
        std::cout << inf.get() << "\n";
    }
    inf.close();
    inf.clear();
    inf.open( "ex.txt", std::ios::in );
    char c;
    while( inf >> c ) {
        std::cout << c << "\n";
    }
    return 0;
}
Copier après la connexion

Lorsque le fichier d'entrée "ex.txt" contient "abc", la première boucle while lit quatre caractères avant de se terminer. En effet, eof() ne définit l'indicateur EOF qu'après une tentative de lecture au-delà de la fin du fichier. La première boucle lit caractère par caractère jusqu'à ce qu'elle atteigne un échec de lecture, définissant l'indicateur EOF. Cependant, get() renvoie -1 pour indiquer la fin du fichier, sans tenir compte de l'indicateur EOF.

La deuxième boucle, utilisant le >> opérateur, présente un comportement correct. Le >> L'opérateur tente de lire un caractère (dans ce cas, une chaîne) et définit l'indicateur EOF en cas d'échec de lecture. Ainsi, la boucle se termine après la lecture de « abc ».

Résoudre la confusion

Pour éviter toute confusion, il est crucial de noter que :

  • -1 est la façon dont get() indique la fin du fichier.
  • eof() définit l'indicateur EOF après une tentative de lecture infructueuse au-delà de la fin du fichier.
  • effectue à la fois une lecture et une mise à jour du drapeau EOF.

Par conséquent, en utilisant >> est recommandé plutôt que eof() avec get() pour détecter avec précision la fin d'un fichier.

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