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; }
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 :
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!