2017-09-20 3 views
4

Je dispose d'un fichier texte nommé myfile.txt qui se lit:Pourquoi ftell ignore certaines positions dans le fichier?

line 1 
l 

Mon code:

#include<stdio.h> 
int main(){ 
    FILE *f = fopen("myfile.txt","r"); 
    if(f==NULL){ 
     FILE *fp=fopen("myfile.txt","w"); 
     fclose(fp); 
     f = fopen("myfile.txt","r"); 
    } 
    while(!feof(f)){ 
     printf("\ncharacter number %d ",ftell(f)); 
     putchar(fgetc(f));  
    } 
    fclose(f); 
    return 0; 
} 

La sortie est:

character number 0 l 
character number 1 i 
character number 2 n 
character number 3 e 
character number 4 
character number 5 1 
character number 6 

character number 8 l 
character number 9    

Chaque fois qu'un \ n est rencontrée, le ftell saute une valeur par exemple, il a sauté la valeur 7. Pourquoi est-ce le cas? S'il vous plaît expliquez-moi en détail, je veux savoir.

+0

S'il vous plaît voir la question connexe https://stackoverflow.com/questions/10651108/why-does-ftell-shows-wrong-position-after-fread?rq=1 – Saustin

+0

Utilisez-vous Windows par hasard? –

+0

@ AjayBrahmakshatriya oui j'utilise windows. –

Répondre

1

Le problème réside dans le caractère de nouvelle ligne, qui dans Windows est \r\n (Does Windows carriage return \r\n consist of two characters or one character?).

Essayez de changer ceux-ci:

fopen("myfile.txt","r"); 

à ces:

fopen("myfile.txt","rb"); 

b est en mode binaire.

Le mode binaire fait la différence sur Windows où le mode texte associe la séquence de retour chariot et de saut de ligne à un caractère de nouvelle ligne unique. Remarque: Aucune cartographie n'est nécessaire sous Linux.

+0

Merci beaucoup. Cela a fonctionné avec "rb". Pouvez-vous expliquer comment/r/n affecte mon programme? –

+0

@ChaitanyaVaishampayan mis à jour. J'espère que cela pourra aider! – gsamaras

+0

@axiac j'ai tapé par erreur/r/n. Je voulais dire \ r \ n. –