c 檔案結束符

2021-09-06 05:50:15 字數 1022 閱讀 1905

一直奇怪下面一段程式怎樣才結束,按多少次回車也沒用。

#includeint

main()

有人說要按兩次ctrl+z再按回車,有人說直接輸入eof就ok。試了下,原來是這樣的。

ctrl+z+回車+回車或者eof+回車或者\0

+回車

windows系統中一般採用阻塞式檢查 ctrl+z、unix/linux系統下一般採用非阻塞式的檢查 ctrl+d。

這種阻塞式的方式有乙個特點:只有按下回車之後才有可能檢測在此之前是否有ctrl+z按下。還有乙個特點就是:如果輸入緩衝區中有可讀的資料則不會 檢測ctrl+z(因為有要讀的資料,還不能認為到了流的末尾)。還有一點需要知道:ctrl+z產生的不是乙個普通的ascii碼值,也就是說它產生的 不是乙個字元,所以不會跟其它從鍵盤上輸入的字元一樣能夠存放在輸入緩衝區。

從鍵盤上輸入-2^z 加 回車之後在windows系統上是這樣處理的:由於回車的作用,前面的 -2字元被送到輸入 緩衝區(注意:上面說過了,^z不會產生字元,所以更不會儲存到輸入緩衝區,緩衝區中沒有 ^z 的存在)。這時,cin.get() 檢測 到輸入緩衝區中已經有資料存在(因此不再檢查是否有 ^z 的輸入),於是從緩衝中讀取相應的資料。如果都讀取完了,則輸入緩衝區重新變為空, cin.get() 等待新的輸入。可見,儘管有 ^z 按下,但是由於在此之前還有其它輸入字元(-2),所以流也不會結束。

因此,輸入流結束的條件就是:^z 之前不能有任何字元輸入(回車除外),否則 ^z 起不到流結束的作用。

eof 是 end of file 的縮寫。

在 c 語言中,它是在標準庫中定義的乙個巨集。

人們經常誤認為 eof 是從檔案中讀取的乙個字元。其實,eof 不是乙個字元,它被定義為是 int 型別的乙個負數(比如 -1)。eof 也不是檔案中實際存在的內容。eof 也不是只表示讀檔案到了結尾這一狀態(這種狀態可以用 feof() 來檢測),它還能表示 i/o 操作中的讀、寫錯誤(通常可以用 ferror() 來檢測)以及其它一些關聯操作的錯誤狀態。

C 檔案結束符

問題描述 windows下 int main string str while cin str cout n end 控制台輸入多個字串後,輸入檔案結束符crtl z,並未使while迴圈結束,該如何跳出while迴圈?解決方法 方法1 回車 ctrl z 回車方法2 改 設定自己的檔案結束符 st...

C 檔案結束符

問題描述 windows下 int main 控制台輸入多個字串後,輸入檔案結束符crtl z,並未使while迴圈結束,該如何跳出while迴圈?解決方法 方法1 回車 ctrl z 回車方法2 改 設定自己的檔案結束符 string a while cin a a x x可以為自己設定的檔案結束...

檔案結束符

初學c 一道例題 使用者輸入一組數,在輸出資訊中顯示共輸入多少個負數。include using namespace std int main cout 當使用istream物件作為條件,結果是測試流的狀態。如果流是有效的,也就是說,如果讀入下乙個輸入是可能的,那麼測試成功。遇到檔案結束符或遇到無效...