Il n'y a pas une telle chose comme un "marqueur EOF" . EOF est simplement une condition de fichier définie en allant à ou après la fin du fichier. Que vous recherchiez 1 octet ou que vous recherchiez 100000 octets après la fin ne fait pas de différence: si le pointeur de position de votre fichier dépasse la fin, vous êtes à ou au-delà de la fin du fichier.
Votre code lit un caractère puis le sauvegarde (ce qui annule essentiellement la lecture du caractère). Il lit ensuite un nombre entier et saute deux caractères après cela. Cela a pour effet de toujours avancer dans le fichier (même si la lecture d'entier échoue). Ainsi, vous finirez par frapper EOF: il n'y a pas de boucle infinie ici.
Dans les jours DOS, les fichiers pourraient contenir l'octet 0x1A (« EOF ASCII ») qui provoquerait certains lecteurs de texte pour arrêter à cet octet. Le contenu du fichier peut s'étendre physiquement au-delà de cet octet, mais les utilitaires de texte peuvent refuser de le lire. Cependant, les bibliothèques C++ standard traitent 0x1A comme n'importe quel autre caractère et le liront heureusement.
Où ouvrez-vous 'sample'? – tadman
Je l'ai déjà ouvert dans le code dessus Il n'y a pas d'erreurs de syntaxe J'ai ouvert et fermé le fichier après –
Le streamstate est collant, il n'est effacé que sur demande explicite, c'est pourquoi il boucle seulement jusqu'à la première fois qu'il atteint EOF. D'autre part, je ne suis pas sûr de comprendre vraiment votre question ... –