>` ? " />
Plonger dans la fonction eof() d'ifstream
Comprendre le comportement de la fonction eof() d'ifstream peut être déroutant, comme illustré dans l'extrait de code fourni :
</p> <h1>inclure <iostream></h1> <h1>include <fstream></h1> <p>int main() {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">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;
}
Examinons l'explication fournie :
Quand EOF Vraiment défini dans
La fonction eof() détecte lorsqu'une opération de lecture tente d'accéder aux données au-delà de la fin du fichier. Cela signifie que :
La raison de ce comportement est d'assurer la compatibilité avec différents appareils, tels que les tuyaux et les sockets, où le concept de taille de fichier peut ne pas être aussi simple qu'avec un fichier texte.
Dévoilement de la magie de get() et >>
Les deux les boucles dans l'extrait de code utilisent différentes approches pour lire le contenu du fichier :
Cela explique pourquoi le la première boucle lit un caractère supplémentaire et affiche -1, tandis que la deuxième boucle donne le résultat correct – elle termine la boucle avant de tenter de lire au-delà de la fin du fichier.
Éviter les périls de -1
Pour éviter de s'appuyer sur le nombre magique -1 pour identifier la fin du fichier, il est recommandé d'utiliser std::char_traits
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!