C 檔案結束符

2021-06-10 19:44:49 字數 1316 閱讀 3152

問題描述:windows下

int main()

string str;

while(cin>>str);

cout<<"\n"<<"end"《控制台輸入多個字串後,輸入檔案結束符crtl-z,並未使while迴圈結束,該如何跳出while迴圈?

解決方法:
方法1:回車 - ctrl-z - 回車
方法2:改**,設定自己的檔案結束符

string a;

while((cin>> a)&&a!='x')

x可以為自己設定的檔案結束符。

原因解析:
當從鍵盤輸入一串字元並按回車後,這些字元會首先被送到輸入緩衝區中儲存。每當按下回車鍵後,cin.get()就會檢測輸入緩衝區中是否有了可讀的資料。cin.get()還會對鍵盤上是否有流結束標識的ctrl-z或者ctrl-d鍵按下做出檢查,其檢查的方式有兩種,阻塞式以及非阻塞式。
windows系統一般採用阻塞式檢查ctrl-z,unix/linux系統下一般採用非阻塞式的檢查ctrl-d.
阻塞式檢查方式是指只有在回車鍵按下之後才對此前是否有ctrl-z組合鍵按下進行檢查。另外,如果輸入緩衝區中有可讀的資料則不會檢測ctrl-z,因為有可讀資料,說明還未到流的末尾。需要注意的時,ctrl-z產生的不是乙個普通的ascii字元,因此ctrl-z不會跟其它從鍵盤輸入的字元一樣能夠存放在輸入緩衝區中。因此,若使ctrl-z產生作用,輸入ctrl-z之前不應輸入任何字元,即輸入回車鍵把之前輸入的字元全部送入緩衝區中後,緊接著應輸入ctrl-z,然後輸入回車鍵,告知系統檢測流結束符ctrl-z.
非阻塞式是指按下ctrl-d之後立即響應的方式。如果在ctrl-d輸入之前已經從鍵盤輸入了字元,則ctrl-d相當於回車,即把這些字元送到了輸入緩衝區供讀取使用,此時ctrl+d不再起流結束符的作用。若ctrl-d輸入之前沒有任何鍵盤輸入,則ctrl-d就是流結束的訊號。
windows 下ctrl-z使用舉例說明如下:
從鍵盤上輸入abcd^z 再輸入回車鍵後,系統處理如下:因為回車的作用,前面的abcd等字元被送到輸入緩衝區中,而^z不會產生字元,因此不會儲存到緩衝區中。這時,cin.get()檢測到輸入緩衝區中已經有資料存在,就不會檢測有無^z存在,cin.get()從緩衝中讀取相應的資料,如果讀取完了,則輸入緩衝區重新變為空,cin.get()等待新的輸入,可見儘管有ctrl-z輸入,但是之前有其它字元,系統並未監測到流結束符。
因此輸入流結束符的條件就是:^z之前不能有任何字元輸入(回車鍵除外),然後再用回車鍵通知系統做流結束符檢測。
**:

C 檔案結束符

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

c 檔案結束符

一直奇怪下面一段程式怎樣才結束,按多少次回車也沒用。includeint main 有人說要按兩次ctrl z再按回車,有人說直接輸入eof就ok。試了下,原來是這樣的。ctrl z 回車 回車或者eof 回車或者 0 回車 windows系統中一般採用阻塞式檢查 ctrl z unix linux...

檔案結束符

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