Zi 字媒體
2017-07-25T20:27:27+00:00
相信很多朋友在學習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即可發現答案! 如下:C語言C++交流群496926338C語言C++交流群496926338喜歡的話關注收藏評論轉發一波 比心么么噠!加入我們C語言C++學習交流 壹 496926338群內有大量的項目開發和新手教學視頻千人大群等著你來加入。怎麼樣?看到了吧,EOF其實就是-1!也就是說EOF就是個數字,被定義為-1而已!為什麼這樣做呢? stdio.h作為一個標準輸入輸出的頭文件,自然會定義很多標準的東西,那麼EOF正是因此而生,且聽筆者慢慢道來:在我們進行包括scanf等的輸入函數使用時,其實用戶在cmd中的輸入實際是存放於緩衝區當中,當用戶鍵入回車那一瞬間,之前輸入的數據才會被存進去,而這裡無論是單個字元還是字元串,我們都知道scanf的返回值呢是表示成功接受到的對象的個數,那這裡如果遇到特殊情況,比如緩衝區文件流滿等問題,那麼scanf將如何處理呢?答案是返回-1 ! 這裡不光是scanf,返回值為個數的函數,遇到文件流滿大多都會返回-1,所以這個-1用的比較多,那麼stdio.h就索性專門定義一個宏來表示,取End Of File(文件末尾的意思)的前三個字母即組成EOF,所以也就有了 #define EOF (-1) 這樣的話!那麼,現在看懂了嗎?
寫了
5860316篇文章,獲得
23313次喜歡