EOF是End Of File的意思,在C語言中定義的一個宏,用作文件結(jié)束標(biāo)志。從數(shù)值角度看,就是-1。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了大方免費建站歡迎大家使用!
從一個終端的輸入從來不會真的“結(jié)束”(除非設(shè)備被斷開),但把從終端輸入的數(shù)據(jù)分區(qū)成多個“文件”卻很有用,因此一個關(guān)鍵的序列被保留下來來指明輸入結(jié)束。
在UNIX和AmigaDOS中,將擊鍵翻譯為EOF的過程是由終端的驅(qū)動程序完成的,因此應(yīng)用程序無需將終端和其它輸入文件區(qū)分開來。
Unix平臺的驅(qū)動程序在行首傳送一個傳輸結(jié)束字符(Control-D,ASCII編碼為為04)來指明文件結(jié)束。
在AmigaDOS中,驅(qū)動程序傳送一個Control-\來指明文件結(jié)束(而Control-D被用作中斷字符)。要向輸入流中插入一個真正的Control-D字符,用戶需要把一個“引用”命令字符放在它的前面(通常是Control-V,表示下一個字符不作為控制字符,而是按照字面量使用)。
在微軟的DOS和Windows(以及CP/M和許多DEC操作系統(tǒng))中,讀取數(shù)據(jù)時終端不會產(chǎn)生EOF。此時,應(yīng)用程序知道數(shù)據(jù)源是一個終端(或者其它“字符設(shè)備”),并將一個已知的保留的字符或序列解釋為文件結(jié)束的指明;最普遍地說,它是ASCII碼中的替換字符(Control-Z,代碼26)。
一些MS-DOS程序,包括部分微軟MS-DOS的shell(COMMAND.COM)和操作系統(tǒng)功能程序(如EDLIN),將文本文檔中的Control-Z視為有意義數(shù)據(jù)的結(jié)尾,并且/或者在寫入文本文檔時將Control-Z添加到文檔末尾。這是由于兩個原因:
1、向后兼容CP/M。CP/M的第1版與第2版的文件系統(tǒng)以128字節(jié)“塊”的倍數(shù)記錄文件長度,所以當(dāng)有意義數(shù)據(jù)在一個“塊”的中間結(jié)束時,習(xí)慣上用Control-Z字符來標(biāo)記它,此后至塊結(jié)尾的字節(jié)為未利用。而MS-DOS文件系統(tǒng)總會記錄文件確切的字節(jié)長度,所以在MS-DOS中文件不再必需以Control-Z字符來標(biāo)記結(jié)尾。
2、它使得應(yīng)用程序在從終端和文本文檔讀取數(shù)據(jù)時得以使用相同的代碼。
概念:
在C語言中,或更精確地說成C標(biāo)準(zhǔn)函數(shù)庫中表示文件結(jié)束符(end of file)。在while循環(huán)中以EOF作為文件結(jié)束標(biāo)志,這種以EOF作為文件結(jié)束標(biāo)志的文件,必須是文本文件。在文本文件中,數(shù)據(jù)都是以字符的ASCII代碼值的形式存放。我們知道,ASCII代碼值的范圍是0~127,不可能出現(xiàn)-1,因此可以用EOF作為文件結(jié)束標(biāo)志。
應(yīng)用:
檔案存取或其它 I/O 功能可能傳回等于象征符號值 (巨集) EOF 指示檔案結(jié)束的情形發(fā)生。實際上 EOF 的值通常為 -1,但它依系統(tǒng)有所不同。巨集 EOF會在編譯原始碼前展開實際值給預(yù)處理器。
C語言中,EOF常被作為文件結(jié)束的標(biāo)志。還有很多文件處理函數(shù)處錯誤后的返回值也是EOF,因此常被用來判斷調(diào)用一個函數(shù)是否成功。
例如:
在 UNIX中, EOF表示能從交互式 shell (終端) 送出 Ctrl+D (習(xí)慣性標(biāo)準(zhǔn))。在微軟的 DOS 與 Windows 中能送出 Ctrl+Z。在某些例子處理純文字檔案或從"字元設(shè)備"讀入資料,微軟MS-DOS的 shell 或系統(tǒng)程序會加入ASCIIControl-Z 字元到磁碟檔案結(jié)束處 (盡管基本核心MSDOS.SYS檔案寫入呼叫從未附加 Control-Z)。這是向下相容于一些奇特的CP/M功能,從CP/M 檔案系統(tǒng)只能就記錄的檔案長度分配多少 128 位元 "記錄"。MS-DOS 檔案系統(tǒng)從一開始就能精確的記錄檔案的位元長度。
ASCII控制字符在字元串流是 out-of-band 不可列印字元。通常表可讀的助憶碼。
在控制臺要輸入eof的話 按ALT+65535就可以了。
與feof:
C語言中,當(dāng)把數(shù)據(jù)以二進(jìn)制形式存放到文件中時,就會有-1值的出現(xiàn),此時不能采用EOF作為二進(jìn)制文件的結(jié)束標(biāo)志。為解決這個問題,ANSI C提供一個feof函數(shù),用來判斷文件是否結(jié)束。如果遇到文件結(jié)束,函數(shù)feof(fp)的值為1,否則為0.feof函數(shù)既可用以判斷二進(jìn)制文件是否結(jié)束,也可以用以判斷文本文件是否結(jié)束。[1]
例如:編寫程序,用于把一個文本文件(源文件)復(fù)制到另一個文件(目的文件)中。源文件名為file_a.dat,目的文件名為file_b.dat。程序如下:
EOF 函數(shù):
返回一個數(shù)值(整數(shù)類型Integer),它包含布爾值Boolean值True,表明已經(jīng)到達(dá)為Random(Open語句方法)或順序Input (Open 語句方法)打開的文件的結(jié)尾。
語法:
EOF(filenumber)
必要的filenumber參數(shù)是一個Integer,包含任何有效的文件號。
說明:
EOF (End Of File)
使用EOF是為了避免因試圖在文件結(jié)尾處進(jìn)行輸入而產(chǎn)生的錯誤。
直到到達(dá)文件的結(jié)尾,EOF函數(shù)都返回False。對于為訪問Random或Binary而打開的文件,直到最后一次執(zhí)行的Get語句無法讀出完整的記錄時,EOF都返回False。
windows:
首先在最后一行結(jié)束后(此時未換行)輸入ENTER鍵,新起一行,再輸入ctrl+z,再輸入時ENTER鍵即可。?
Linux:
直接按CTRL+D快捷鍵
示例:
#includeiostream
using namespce std;
void main()
{
int? a;
while(cin a)
{
;//循環(huán)輸入的代碼塊
}
}
擴展資料:
C語言中,當(dāng)把數(shù)據(jù)以二進(jìn)制形式存放到文件中時,就會有-1值的出現(xiàn),此時不能采用EOF作為二進(jìn)制文件的結(jié)束標(biāo)志。為解決這個問題,ANSI C提供一個feof函數(shù),用來判斷文件是否結(jié)束。
如果遇到文件結(jié)束,函數(shù)feof(fp)的值為1,否則為0.feof函數(shù)既可用以判斷二進(jìn)制文件是否結(jié)束,也可以用以判斷文本文件是否結(jié)束。
例如:編寫程序,用于把一個文本文件(源文件)復(fù)制到另一個文件(目的文件)中。源文件名為file_a.dat,目的文件名為file_b.dat。程序如下:
#include stdio.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
void filecopy(FILE *,FILE *);
main ( )
{
FILE*fpin,*fpout;
fpin =fopen ("file_a.dat","r"); /*打開輸入文件*/
fpout = fopen ("file_b.dat","w"); /*打開輸出文件*/
filecopy( fpin,fpout ); /*把fpin所指文件中的內(nèi)容輸出到fpout所指文件中*/
fclose ( fpin );fclose ( fpout ); /*關(guān)閉輸入輸出文件*/
}
void filecopy( FILE *fpin, FILE *fpout )
{
char ch;
ch = getc ( fpin ); /*先讀一次文件再去判文件是否結(jié)束*/
while ( !feof( fpin ) ) /*當(dāng)未到文件末尾是進(jìn)行循環(huán)*/
{
putc ( ch, fpout ); ch= getc ( fpin );} /*逐個字符進(jìn)行復(fù)制*/
}
eof定義在頭文件stdio,h中,值是整形數(shù)-1。
eof
=
end
of
file,意思是文件結(jié)束,當(dāng)讀一個文件讀到文件最后時,讀文件的函數(shù)(比如函數(shù)fgetc(file
*fp))就會返回這個常量。
在c語言中,鍵盤也作為文件處理,鍵盤的流指針是stdin。比如常用函數(shù)scanf(),返回成功讀入的數(shù)據(jù)個數(shù),如果沒有任何數(shù)據(jù)被成功讀入,則返回eof。
文章名稱:c語言EOF在哪個庫函數(shù) c++eof函數(shù)
當(dāng)前URL:http://chinadenli.net/article40/dodcdeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、搜索引擎優(yōu)化、響應(yīng)式網(wǎng)站、定制網(wǎng)站、做網(wǎng)站、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)