2014-09-12 3 views
-2

Dans le bloc de code suivant, j'ai créé un document numbers.txt sur lequel est inscrit le chiffre 1 si ce programme ne répète pas le mot OK un nombre infini de fois car il dépasse le marqueur eofSortie d'entrée de fichier C++

while (!sample.eof()) 
{ 
     char ch; 
     sample.get(ch); 
     sample.seekp(-1L, ios::cur); 
     sample >> initialnumber; 
     sample.seekp(2L, ios::cur); 
     cout << "OK"; 

} 
+0

Où ouvrez-vous 'sample'? – tadman

+0

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 –

+0

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 ... –

Répondre

0

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.

+0

OK cela a du sens c'est ce que j'ai d'abord pensé mais mon professeur et cet autre gars sur ce site ont complètement contredit tout ce que j'ai lu –

+0

Si vous voulez dire Ulrich, il n'essaie pas de contredire quoi que ce soit. Il parle d'un problème différent et était confus parce que votre question n'était pas claire. – nneonneo

+0

Mais j'ai fait un programme différent qui suit une logique similaire et fait exactement l'inverse et cette fois suit dans une boucle infinie –