你真的理解對了C語言中的EOF嗎?

2021-10-04 17:39:45 字數 2030 閱讀 5051

前言:當我們在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++裡面輸入字元的函式,將輸入的值,賦給變數ccin.get()函式的使用1

。重點來了!!!

cin.get()返回值的型別是int型別,不是char型別,所以第5行 定義的是int型別的變數c來接收,存放返回值。

cin.get()從輸入流裡面讀取乙個字元,把這個字元的 ascii 碼的值,以int型別返回。當cin.get()讀取字元的時候,返回值型別為int且 返回值 ≥ 0 。

而當cin.get()在輸入結束的時候,還試圖輸入,就會返回eofeof的值通常是-1。也就是cin.get()在沒有資料可以讀的時候,返回值就是-1,判斷cin.get()是否為-1就可以知道資料是否讀完。

eof並不是輸入結尾的標誌,輸入流裡面並沒有乙個eof作為輸入的結尾,不管輸入**於**,只是輸入結束的時候,cin.get()無法讀取資料,會返回值為-1,也就是返回eof

在windows 中,ctrl+z是 結束輸入資料 但不能認為ctrl+zeof

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 可以說它是乙...