寫程式時想要用 cin 對輸入的合法性檢查,於是學習了一下 cin.fail() 函式,順便學習了類似的一些函式。
cin 物件包含了乙個描述流狀態的資料成員。流狀態有 3 個標誌位:eofbit,badbit 和 failbit。
當 cin 操作到達檔案末尾時,eofbit 置 1。
當流被破壞時,badbit 置 1。例如:試圖讀取不可訪問的檔案、寫入寫保護的磁碟、寫入的裝置剩餘空間不足等。
cin 操作未能讀取到預期的字元時 failbit 會置 1。例如:要輸入到乙個整型變數中,輸入的卻是字元時 failbit 置 1。i/o 失敗時 failbit 也可能置 1。
如果 3 個狀態位都為 0 表示一切順利。
下面介紹一些檢查或改變流狀態的方法。
如果 eofbit 為 1 返回 true。
所以可以用cin.eof()
來判斷是否讀到檔案尾。
如果流可以使用,也就是 3 個狀態位都為 0,返回 true。
只有cin.good()
為 true 時,while(cin >> input)
才返回 true。
如果 badbit 為 1 返回 true。
如果 failbit 或 badbit 為 1 返回 true。所以與 bad() 一樣的情況會返回 true,輸入乙個型別不匹配的字元也是返回 true。
可用於檢查輸入是否合法。
int a;
cin >> a;
if(cin.fail())
注意:如果輸入不合法重新輸入,failbit 是不會自動重置的。
返回流狀態。
狀態位置位後不會改變。因此要重置狀態位需使用 clear(iostate s)。該方法將所有的狀態位都設定為 s,其中 s 預設為 0。也就是 clear() 將所有狀態位清零。
《c++ primer plus》 stephen pratac++之cin.eof, cin.bad, cin.good, cin.fail, cin.clear
cin輸入錯誤處理
開始學習cin,cin.get cin.getline 覺得還好。直到昨天錯誤地寫了乙個 的時候,發現輸入不正確了。然後對這個問題進行了一些總結。cin是從緩衝區讀取資料的,那麼當緩衝區有殘留的資料的時候,按理來說cin也應該從緩衝區讀取,並會跳過鍵盤輸入的這個過程。可以見在輸入第乙個字串的時候,如...
IIS 常見錯誤處理
1.確認站點的framework版本。檢視虛擬目錄與站點的framework是否不一致 2.檢視應用程式池 高階設定 啟用win32位應用程式 3.設定isapi配置。功能檢視 雙擊 isapi篩選器 啟用isapi dll 處理程式 isapimodule 4.如果裝了vs再裝iis必須得對net...
MySQL常見錯誤處理
1.mysql error 1018 can t read dir of dbname 原因 mysql使用者不是dbname目錄的owner 此時可以 ls l 或 ll 檢視該目錄的詳細資訊,就可發現庫目錄的屬主不是mysql 解決方法 chown r mysql mysql mysql資料庫儲...