46 votes

Comment fonctionne eof() d'ifstream ?

#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;
}

Je suis vraiment confus au sujet de la fonction eof() . Supposons que le contenu de mon ex.txt soit :

 abc

Il lit toujours un caractère supplémentaire et affiche -1 lors de la lecture à l'aide de eof() . Mais le inf >> c donné la sortie correcte qui était « abc » ? Quelqu'un peut-il m'aider à expliquer cela?

7voto

Justin Spahr-Summers Points 12167

L'indicateur EOF n'est défini qu'après qu'une opération de lecture tente de lire au-delà de la fin du fichier. get() renvoie la constante symbolique traits::eof() (qui se trouve être égale à -1) car elle a atteint la fin du fichier et ne peut plus lire de données, et ce n'est qu'à ce moment-là qu'elle eof() être vrai. Si vous souhaitez vérifier cette condition, vous pouvez procéder comme suit :

 int ch;
while ((ch = inf.get()) != EOF) {
    std::cout << static_cast<char>(ch) << "\n";
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X