前言:當我們在c語言或者c++ 迴圈輸入的時候,經常用到!=eof
可這個 eof究竟是什麼呢?eof = end of file,結束輸入麼?
接下來,我將我所知道的關於eof,講解在下文,有可能讓你 「奇怪的知識增加了」。
以下內容,由於我的知識有限,可能會比較亂,也沒有目錄來增加層次感,所以需要耐心閱讀。
先來放一段c語言的**,
#include
intmain()
}
這段**的作用,讀入所有的字元,包括空格,回車。小夥伴們可以自己執行一下,
當我從鍵盤輸入什麼,控制台就輸出什麼,直到我按ctrl+z
結束輸入
下面這乙個是c++的**,作用也和上面的c語言的**一樣
#include
#include
using
namespace std;
intmain()
return0;
}
先分析一下c++的**,第6行,先輸入資料到變數c
再依據是否等於eof
來決定繼續再while
裡面迴圈,還是結束迴圈。這個可能還是有些小夥伴難以理解,下面我再仔細拆分講一下
第6行的while
是迴圈,根據while(條件)
條件是否成立,來決定,是不是要繼續執行while
迴圈體。
while
裡面的條件是(c=cin.get())!=eof
。
cin.get()
是 c++裡面輸入字元的函式,將輸入的值,賦給變數c
,cin.get()
函式的使用1
。重點來了!!!
cin.get()
返回值的型別是int
型別,不是char
型別,所以第5行 定義的是int
型別的變數c來接收,存放返回值。
cin.get()
從輸入流裡面讀取乙個字元,把這個字元的 ascii 碼的值,以int
型別返回。當cin.get()
讀取字元的時候,返回值型別為int
且 返回值 ≥ 0 。
而當cin.get()
在輸入結束的時候,還試圖輸入,就會返回eof
,eof
的值通常是-1。也就是cin.get()
在沒有資料可以讀的時候,返回值就是-1,判斷cin.get()
是否為-1就可以知道資料是否讀完。
eof
並不是輸入結尾的標誌,輸入流裡面並沒有乙個eof
作為輸入的結尾,不管輸入**於**,只是輸入結束的時候,cin.get()
無法讀取資料,會返回值為-1,也就是返回eof
在windows 中,ctrl+z是 結束輸入資料 但不能認為ctrl+z是eof
。
第7行**中 因為cin.get()
讀取的是被放到int型別,所以需要(char)
強制轉換。
在c語言的**中,由於scanf
表示式的值為int,表示成功讀入的變數個數 。所以在第3行中,直接char c;
cin.get()
函式的用法詳解:傳送門↩︎
關於c語言中的EOF的理解
計算機術語,縮寫通常為eof end of file 在作業系統中表示資料來源無更多的資料可讀取。資料來源通常稱為檔案或串流。在c語言中,或更精確地說成c標準函式庫中表示檔案結束符 end of file 在while迴圈中以eof作為檔案結束標誌,這種以eof作為檔案結束標誌的檔案,必須是文字檔案...
C語言中的EOF
在c語言中,或更精確地說成c標準函式庫中表示檔案結束符 end of file 在while迴圈中以eof作為檔案結束標誌,這種以eof作為檔案結束標誌的檔案,必須是文字檔案。在文字檔案中,資料都是以字元的ascii 值的形式存放。我們知道,ascii 值的範圍是0 127,不可能出現 1,因此可以...
C語言中的EOF
本文是自己通過各種查閱以後的個人理解,如果有理解的地方還請大家多多指正!在做小演算法題目的時候經常用到eof,模模糊糊用但不清楚到底是什麼意思。後來遇到了問題進行了仔細了解。eof是end of file,也就是指 檔案 的結尾,這裡的檔案可以指檔案 file 也可以指輸入 stdin 可以說它是乙...