C語言中EOF的應用

2021-08-09 16:53:15 字數 1575 閱讀 6540

1.5.1. 檔案複製

借助於getchar 與putchar 函式,可以在不了解其它輸入/輸出知識的情況下編寫出

數量驚人的有用的**。最簡單的例子就是把輸入一次乙個字元地複製到輸出,其基本思想

如下:讀乙個字元

while (該字元不是檔案結束指示符)

輸出剛讀入的字元

讀下乙個字元

將上述基本思想轉換為c語言程式為:

#include

main()

}其中,關係運算子!=表示「不等於」。

字元在鍵盤、螢幕或其它的任何地方無論以什麼形式表現,它在機器內部都是以位模式

儲存的。char 型別專門用於儲存這種字元型資料,當然任何整型(int)也可以用於儲存字

符型資料。因為某些潛在的重要原因,我們在此使用int型別。

這裡需要解決如何區分檔案中有效資料與輸入結束符的問題。c語言採取的解決方法是:

在沒有輸入時,getchar 函式將返回乙個特殊值,這個特殊值與任何實際字元都不同。這個

值稱為eof(end of file,檔案結束)。

我們在宣告變數c 的時候,必須讓它大到足以存放getchar函式返回的任何值。這裡之所以不把c宣告成char型別,是因為它必須足夠大,除了能儲存任何可能的字元外還要能儲存檔案結束符eof。因此,我們將c宣告成int型別。

eof 定義在標頭檔案中,是個整型數,其具體數值是什麼並不重要,只要它與任何char型別的值都不相同即可。這裡使用符號常量,可以確保程式不需要依賴於其對應的任何特定的數值。

對於經驗比較豐富的c 語言程式設計師,可以把這個字元複製程式編寫得更精煉一些。在c語言中,類似於

c = getchar()

之類的賦值操作是乙個表示式,並且具有乙個值,即賦值後左邊變數儲存的值。也就是說,

賦值可以作為更大的表示式的一部分出現。如果將為c賦值的操作放在while迴圈語句的測

試部分中,上述字元複製程式便可以改寫成下列形式:

#include

main()

在該程式中,while 迴圈語句首先讀乙個字元並將其賦值給c,然後測試該字元是否為檔案

結束標誌。如果該字元不是檔案結束標誌,則執行while語句體,並列印該字元。隨後重複

執行while語句。當到達輸入的結尾位置時,while迴圈語句終止執行,從而整個main函

數執行結束。

以上這段程式將輸入集中化,getchar函式在程式中只出現了一次,這樣就縮短了程式,

整個程式看起來更緊湊。習慣這種風格後,讀者就會發現按照這種方式編寫的程式更易閱讀。

我們經常會看到這種風格。(不過,如果我們過多地使用這種型別的複雜語句,編寫的程式可

能會很難理解,應盡量避免這種情況。)

對while語句的條件部分來說,賦值表示式兩邊的圓括號不能省略。不等於運算子!=的

優先順序比賦值運算子=的優先順序要高,這樣,在不使用圓括號的情況下關係測試!=將在賦值=

操作之前執行。因此語句

c = getchar() != eof

等價於語句

c = (getchar() != eof)

該語句執行後,c的值將被置為0 或1(取決於呼叫getchar函式時是否碰到檔案結束標誌),

C語言中的EOF

在c語言中,或更精確地說成c標準函式庫中表示檔案結束符 end of file 在while迴圈中以eof作為檔案結束標誌,這種以eof作為檔案結束標誌的檔案,必須是文字檔案。在文字檔案中,資料都是以字元的ascii 值的形式存放。我們知道,ascii 值的範圍是0 127,不可能出現 1,因此可以...

C語言中的EOF

本文是自己通過各種查閱以後的個人理解,如果有理解的地方還請大家多多指正!在做小演算法題目的時候經常用到eof,模模糊糊用但不清楚到底是什麼意思。後來遇到了問題進行了仔細了解。eof是end of file,也就是指 檔案 的結尾,這裡的檔案可以指檔案 file 也可以指輸入 stdin 可以說它是乙...

C語言中的EOF是什麼?

日期 2011年11月12日 我學習c語言的時候,遇到的乙個問題就是eof。它是end of file的縮寫,表示 文字流 stream 的結尾。這裡的 文字流 可以是檔案 file 也可以是標準輸入 stdin 比如,下面這段 就表示,如果不是檔案結尾,就把檔案的內容複製到螢幕上。int c wh...