feof函式詳解

2021-06-22 22:20:18 字數 1882 閱讀 2307

feof函式詳解

網上很多feof

講解的很模糊,百看不如一試,經過筆者在編譯器的親自測試之後總結如下:

第一種情況:

如果沒有使用fread

讀取檔案而直接使用

feof

函式得到的返回值是0;

第二種情況:

使用fread

讀取檔案,假設使用

fread(buf,1,1,filp) 

乙個位元組乙個位元組的進行讀取,如果沒有讀到檔案的結尾,那麼

feof

返回值都是

0,直到讀到檔案結尾那麼返回值就是1

例如:假設要讀取的檔案名字為txt

,檔案內容是 hi

程式是:

char buf[10];

file *filp = fopen(「./txt」,」rw」); //筆者在

linux

下測試,

./txt

表示本目錄下的

txt檔案

printf(「%d\n」,feof(fip));  //列印 

0  沒有呼叫

fread 

必然列印0

fread(buf,1,1,filp);

printf(「%d\n」,feof(fip)); //列印 

0  讀取第乙個位元組h

fread(buf,1,1,filp);

printf(「%d\n」,feof(fip)); //列印 

0  讀取第二個位元組i

fread(buf,1,1,filp);

printf(「%d\n」,feof(fip)); //列印 

0 讀取第三個位元組

---換行符!!

fread(buf,1,1,filp);

printf(「%d\n」,feof(fip));   //列印

1  讀取檔案結束

所以需要注意的有兩點乙個是沒有使用fread

直接用feof

會返回0

,另乙個就是換行符也算是要讀取的乙個位元組,所以如果檔案是空的,使用

fread

之後呼叫

feof

也會返回

0,因為空檔案也是先讀取換行符! 然後再次

fread

之後使用

feof就是1

了。 第三種情況:

使用fread以n

個位元組為單位進行讀取,例如以

4個位元組為一組,

fread(buf,4,1,filp),

如果在4

個位元組中包含了檔案結束符,那麼返回的就是1

例如:例如:假設要讀取的檔案名字為txt

,檔案內容是 

kkk

那麼程式這樣:

char buf[10];

file *filp = fopen(「./txt」,」rw」); //筆者在

linux

下測試,

./txt

表示本目錄下的

txt檔案

printf(「%d\n」,feof(fip));  //列印 

0  沒有呼叫

fread 

必然列印0

fread(buf,4,1,filp);

printf(「%d\n」,feof(fip));   //列印

0  因為

kkk加上換行符正好是

4個位元組

而如果txt

的內容是 kk

fread(buf,1,1,filp);

printf(「%d\n」,feof(fip));   //列印

1  因為

4個位元組是 

kk+換行符

+檔案結束符 包含了檔案結束符就會列印1

理解的feof()函式

feof 函式 功能 檢測流的檔案結束符eof.用途 用feof 去判斷檔案是否結束,若結束,返回非零,若文件未結束,則返回零 工作原理 即使是空的文件,內容裡有乙個隱藏的 eof 在檔案的最後,表示資料結束 而對於乙個文件,對於feof 函式,並非是讀到eof來判斷結束,而是在游標位置,往後看,如...

關於feof機制的詳解

在擼 的時候遇到乙個問題,使用feof fp 做為檔案結束檢測,使用fscanf讀取檔案,但是往往會 讀取最後一行兩次。測試文件如下 測試 如下 include include int main fclose fp return 0 測試結果如下 從結果上來看,test 輸出了兩次,然而我只需要輸出...

feof 函式以及EOF

函式int feof file fp 檢測到檔案結束符則返回乙個非0值,否則返回0.note 當檔案內部的位置指標指向檔案結束符時,並不會立即設定file結構中的檔案結束標識,只有再執行一次讀操作,才會設定檔案結束標誌,再呼叫feof 才會返回乙個非0值.feof.c include include...