2017-09-20 11 views
4

私は読みmyfile.txtの名前のテキストファイルがあります、なぜftellはファイル内のいくつかの位置をスキップしますか?

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    

\ nが遭遇するたびに:

line 1 
l 

マイコード:

#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; 
} 

が出力されますftellは1つの値をスキップします。たとえば、値7をスキップしました。なぜそうですか?詳細を私に説明してください、私は知りたいです。

+0

関連する質問をご覧くださいhttps://stackoverflow.com/questions/10651108/why-does-ftell-shows-wrong-position-after-fread?rq=1 – Saustin

+0

万が一Windowsを使用していますか? –

+0

@AjayBrahmakshatriyaはい私は窓を使用しています。 –

答えて

1

問題は改行文字で、Windowsでは\r\nDoes Windows carriage return \r\n consist of two characters or one character?)です。

は、これらを変更してみてください:

これらに
fopen("myfile.txt","r"); 

bはバイナリモードです
fopen("myfile.txt","rb"); 

バイナリモードでは、テキストモードで2文字の改行、改行シーケンスを1行の改行文字にマッピングするWindowsが異なります。注:Linuxではマッピングは必要ありません。

+0

ありがとうございました。それは "rb"と一緒に働いた。/r/nが私のプログラムにどのような影響を与えるのかを教えてください。 –

+0

@ChaitanyaVaishampayanが更新されました。希望が助けてくれる! – gsamaras

+0

@axiac私は誤って/ r/nと打ちました。私は\ r \ nを意味しました。 –

関連する問題