feof 函式以及EOF

2021-07-31 09:48:24 字數 1991 閱讀 1505

函式int feof(file *fp) 檢測到檔案結束符則返回乙個非0值,否則返回0.

note:當檔案內部的位置指標指向檔案結束符時,並不會立即設定file結構中的檔案結束標識,只有再執行一次讀操作,才會設定檔案結束標誌,再呼叫feof()才會返回乙個非0值.

feof.c

#include

#include

int main()

}

dicts文字檔案
while

1for2if

3string

4

檔案只有四行,但是在讀第五次的時候,才退出while,因為在第四次讀取的時候雖然已經到了檔案尾部,但沒有立即設定file結構中的檔案結束標識,因此第四次讀取完之後,feof(fp)仍然返回的0。到第五次讀取完之後,feof(fp)返回的才是乙個非0值。

eof在c中實際上是乙個巨集定義,值為-1,可以用來判斷文字檔案的結束,但是不能用來判斷二進位制檔案的結束。因為文字檔案中的所有字元都是使用ascii碼值存放的,範圍是0-127,不可能出現-1,當讀入的字元值為-1時就說明讀到了檔案尾部。

eof 標誌在標準輸入中由ctrl+d(liunx下)或者ctrl+z(win下)產生eof1.c

#include

#include

int main()

}

標準的輸入都有緩衝區,來儲存資料

當緩衝區中有資料:按下ctrl+d輸出緩衝區的內容,再次按下ctrl+d才表示eof,才會結束輸入

當緩衝區沒有資料:按下ctrl+d就代表eof

回車也表示輸出緩衝區的內容,但是回車』\n』也是乙個字元,會產生乙個ascii碼值放到緩衝區中,但是使用ctrl+d或者ctrl+z來輸出緩衝區內容時,並不會產生乙個字元,也不會放到緩衝區中。

非阻塞式和阻塞式

非阻塞式:按下結束識別符號就立即響應

阻塞式:按下結束識別符號不會響應,只有當按下回車的時候才會對之前的結束識別符號進行檢測。

在linux下eof標誌符(ctrl+d)的檢測時非阻塞式。而在windows下eof識別符號(ctrl+z)的檢測是阻塞式。因此在win下如果在輸入ctrl+z之後又輸入了資料之後才回車,後面的資料並不會輸入。

如果想要輸入ctrl+d,先按ctrl+v然後可以輸入ctrl+d,同樣如果想要輸入ctrl+v,只需要按兩下ctrl+v 即可。

立即回顯與延遲回顯

輸入字元的立即回顯:   是非緩衝的(unbuffered)或直接輸入的乙個例項,表示所鍵入的字元對正在等待的程式變為立即可用。

輸入字元的延遲回顯: 是緩衝(buffer)輸入的乙個例項,所鍵入的字元被收集並儲存在緩衝區中,當按下回車之後所鍵入的字元塊對程式變為可用。

在linux終端下輸入命令都是回顯的非緩衝輸入也就是立即回顯,鍵入的字元會在螢幕上顯示。但是我們在終端輸入密碼時都是不回顯非緩衝輸入,鍵入的字元不會顯示在螢幕上。緩衝分為兩類:

完全緩衝(fully buffered):當緩衝區滿時被清空。

行緩衝(line-buffered):遇到乙個換行符時將被清空緩衝區。

建構函式以及this

實際上建構函式與普通的函式並沒有區別,所以一般在開發中會使用大駝峰命名規則來區別普通的函式,建構函式實際上是通過返回乙個this值來完成建構函式的建立的.這個rutern this的操作由new這個操作符來完成,當然個人也可以手動來設定return的返回值,手動設定的返回值會覆蓋由new所自動新增的...

建構函式以及this

實際上建構函式與普通的函式並沒有區別,所以一般在開發中會使用大駝峰命名規則來區別普通的函式,建構函式實際上是通過返回乙個this值來完成建構函式的建立的.這個rutern this的操作由new這個操作符來完成,當然個人也可以手動來設定return的返回值,手動設定的返回值會覆蓋由new所自動新增的...

你真的了解EOF和feof嗎?

判斷檔案結束有兩種方法 eof和feof 檢視stdio.h可以看到如下定義 define eof 1 define ioeof 0x0010 define feof stream stream flag ioeof 由此可以看出,這兩種方式的原理是不同的。有人說eof只能用於文字檔案,其實不然,還...