EOF,為End Of File的縮寫,通常在文本的最後存在此字元表示資料結束。 在微軟的DOS和Windows中,讀取數據時終端不會產生EOF。此時,應用程式知道數據源是一個終端(或者其它“字元設備”),並將一個已知的保留的字元或序列解釋為文件結束的指明;最普遍地說,它是ASCII碼中的替換字元( ...
EOF,為End Of File的縮寫,通常在文本的最後存在此字元表示資料結束。
在微軟的DOS和Windows中,讀取數據時終端不會產生EOF。此時,應用程式知道數據源是一個終端(或者其它“字元設備”),並將一個已知的保留的字元或序列解釋為文件結束的指明;最普遍地說,它是ASCII碼中的替換字元(Control-Z,代碼26)。
在C語言中,或更精確地說成C標準函數庫中表示文件結束符(end of file)。在while迴圈中以EOF作為文件結束標誌,這種以EOF作為文件結束標誌的文件,必須是文本文件。在文本文件中,數據都是以字元的ASCII代碼值的形式存放。我們知道,ASCII代碼值的範圍是0~127,不可能出現-1,因此可以用EOF作為文件結束標誌。
檔案存取或其它 I/O 功能可能傳回等於象徵符號值 (巨集) EOF 指示檔案結束的情形發生。實際上 EOF 的值通常為 -1,但它依系統有所不同。巨集 EOF會在編譯原始碼前展開實際值給預處理器。
C語言中,EOF常被作為文件結束的標誌。還有很多文件處理函數處錯誤後的返回值也是EOF,因此常被用來判斷調用一個函數是否成功。
eg:
1 LinkList LinkListCreatH(){ 2 // Node *L = (Node *)malloc(sizeof(Node)); 3 // L->next=NULL; 4 Node *L=listinit(); 5 int x; 6 while(scanf("%d",&x)!=EOF){ 7 Node *P=listinit(); 8 P->data = x; 9 P->next = L->next; 10 L->next = P; 11 } 12 return L; 13 }
當上面的程式運行時,如果不加" != EOF",那麼這個程式就是個死迴圈,會一直運行下去;
加上" != EOF"後該程式就不是死迴圈了,如果在終端不進行輸入該程式會自動結束(while的意思就是說噹噹前輸入緩存還有東西時就一直讀取,直到輸入緩存中的內容為空時停止)。
在這"scanf("%d",&n) != EOF"相當於"scanf("%d",&n) != EOF",或"~scanf("%d",&n)",或"scanf("%d",&n) == 1 " 。
要註意的是:在終端(黑框)中手動輸入時,系統並不知道什麼時候到達了所謂的“文件末尾”,因此需要用<Ctrl + z>組合鍵然後按 Enter 鍵的方式來告訴系統已經到了EOF,這樣系統才會結束while.