C語言中EOF是什么意思?


相信很多朋友在學習C語言過程中,都看到過EOF的字樣,但翻過整本C語言的書,也沒有看到有這個函數或者關鍵字的,豈不是感覺很奇怪?難道學的不細有疏漏嗎?當然不是!這里筆者告訴您一個技巧,如果您在看代碼過程中,看到特殊的字符感覺不是關鍵字也不是函數,那您首先要想到的就是:這個東西是不是#define或者typedef過的呢?

 

直接開門見山,比如ACM比賽經常有這樣的代碼:while(scanf(“%d%d”)!=EOF)

這玩意啥意思呢?首先scanf你寫while里就很奇怪了,初學者表示沒見過這么嵌套寫的,再加個EOF更離譜了,都讓人懷疑這是不是C代碼了……

 

那給大家講一下,首先這個代碼scanf能寫while里是因為scanf(“%d%d”)!=EOF本身是個邏輯判斷,也就是真或者假,所以可以作為條件判斷寫到while里,那么最主要的問題來了,EOF到底啥玩意?

 

好了,如果您學了C語言中的宏定義就一切真相大白了,您不妨打開我們最常用的stdio.h這個頭文件(不知道怎么打開?隨便打開一個包含這個頭文件的程序,右鍵即可),然后搜索EOF即可發現答案! 如下:

 

怎么樣?看到了吧,EOF其實就是-1!

也就是說EOF就是個數字,被定義為-1而已!

 

為什么這樣做呢? stdio.h作為一個標准輸入輸出的頭文件,自然會定義很多標准的東西,那么EOF正是因此而生,且聽筆者慢慢道來:

在我們進行包括scanf等的輸入函數使用時,其實用戶在cmd中的輸入實際是存放於緩沖區當中,當用戶鍵入回車那一瞬間,之前輸入的數據才會被存進去,而這里無論是單個字符還是字符串,我們都知道scanf的返回值呢是表示成功接受到的對象的個數,那這里如果遇到特殊情況,比如緩沖區文件流滿等問題,那么scanf將如何處理呢?答案是返回-1 ! 這里不光是scanf,返回值為個數的函數,遇到文件流滿大多都會返回-1,所以這個-1用的比較多,那么stdio.h就索性專門定義一個宏來表示,取End Of File(文件末尾的意思)的前三個字母即組成EOF,所以也就有了 #define EOF (-1) 這樣的話!

 文章轉自:https://www.dotcpp.com/wp/25.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM