search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

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即可發現答案! 如下:

C語言C++交流群496926338

C語言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) 這樣的話!

那麼,現在看懂了嗎?



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦