EOF,爲End Of File的縮寫,一般在文本的最後存在此字符表示資料結束。html
在微軟的DOS和Windows中,讀取數據時終端不會產生EOF。此時,應用程序知道數據源是一個終端(或者其它「字符設備」),並將一個已知的保留的字符或序列解釋爲文件結束的指明;最廣泛地說,它是ASCII碼中的替換字符(Control-Z,代碼26)。c++
在C語言中,或更精確地說成C標準函數庫中表示文件結束符(end of file)。在while循環中以EOF做爲文件結束標誌,這種以EOF做爲文件結束標誌的文件,必須是文本文件。在文本文件中,數據都是以字符的ASCII代碼值的形式存放。咱們知道,ASCII代碼值的範圍是0~127,不可能出現-1,所以能夠用EOF做爲文件結束標誌。緩存
檔案存取或其它 I/O 功能可能傳回等於象徵符號值 (巨集) EOF 指示檔案結束的情形發生。實際上 EOF 的值一般爲 -1,但它依系統有所不一樣。巨集 EOF會在編譯原始碼前展開實際值給預處理器。
C語言中,EOF常被做爲文件結束的標誌。還有不少文件處理函數處錯誤後的返回值也是EOF,所以常被用來判斷調用一個函數是否成功。函數
例如:spa
1 #include <stdio.h> 2 3 int main() 4 { 5 int n; 6 while(scanf("%d",&n) != EOF) 7 { 8 9 } 10 11 return 0; 12 }
上面的程序運行時,若是不加" != EOF",那麼這個程序就是個死循環,會一直運行下去;加上" != EOF"後該程序就不是死循環了,若是在終端不進行輸入該程序會自動結束(while的意思就是說噹噹前輸入緩存還有東西時就一直讀取,直到輸入緩存中的內容爲空時中止)。
在這"scanf("%d",&n) != EOF"至關於"scanf("%d",&n) != EOF",或"~scanf("%d",&n)",或"scanf("%d",&n) == 1 " 。scanf的返回值由後面的參數決定code
scanf("%d%d", &a, &b);
若是a和b都被成功讀入,那麼scanf的返回值就是2;若是隻有a被成功讀入,返回值爲1;若是a和b都未被成功讀入,返回值爲0;若是遇到錯誤或遇到end of file,返回值爲EOF,且返回值爲int型。htm
可是在C++中不存在這種用法,但相同做用的有while((cin >> a) != 0):
之前不理解在while裏面用cin >> a;是什麼意思,cin是C++的輸入流對象,">>"是重載的運算符,cin>>的返回值是cin對象。用這個當條件的話,經過檢測其流的狀態來判斷結束;
(1)若流是有效的,即流未遇到錯誤,那麼檢測成功;
(2)若遇到文件結束符,或遇到一個無效的輸入時(例如本題輸入的值不是一個整數),istream對象的狀態會變爲無效,條件就爲假;讀取失敗的時候,就不能繼續讀取了,那麼讀取操做結束,while(cin>>a)就返回false,跳出循環!
C++中的while (cin>>n,n):
他的做用是:輸入一個數,這數不爲0時進入循環,爲0時跳出循環。
採納:"https://www.cnblogs.com/tgycoder/p/4958519.html"
輸入(cin)緩衝是行緩衝。當從鍵盤上輸入一串字符並按回車後,這些字符會首先被送到輸入緩衝區中存儲。每當按下回車鍵後,cin 就會檢測輸入緩衝區中是否有了可讀的數據,這種狀況下cin對鍵盤上是否有做爲流結束標誌CTRL+Z或者CTRL+D,其檢查的方式有兩種:阻塞式以及非阻塞式。對象
阻塞式檢查方式指的是隻有在回車鍵按下以後纔對此前是否有 Ctrl+Z 組合鍵按下進行檢查,非阻塞式樣指的是按下 Ctrl+D 以後當即響應的方式。若是在按 Ctrl+D 以前已經從鍵盤輸入了字符,則 Ctrl+D的做用就至關於回車,即把這些字符送到輸入緩衝區供讀取使用,此時Ctrl+D再也不起流結束符的做用。若是按 Ctrl+D 以前沒有任何鍵盤輸入,則 Ctrl+D 就是流結束的信號。
阻塞式的方式有一個特色:只有按下回車以後纔有可能檢測在此以前是否有Ctrl+Z按下。blog