cin輸入錯誤處理

2021-08-10 17:45:38 字數 1944 閱讀 3151

開始學習cin, cin.get( ), cin.getline( )覺得還好。直到昨天錯誤地寫了乙個**的時候,發現輸入不正確了。然後對這個問題進行了一些總結。

cin是從緩衝區讀取資料的,那麼當緩衝區有殘留的資料的時候,按理來說cin也應該從緩衝區讀取,並會跳過鍵盤輸入的這個過程。

可以見在輸入第乙個字串的時候,如果有空格出現,那麼輸入就停止了,cin在輸入字串的時候,唯讀入空格前的字串,空格之後的字串便留在了緩衝區。第二個cin在執行的時候,就發現緩衝區有了殘留的,直接從緩衝區把殘留的資料取了出來存到了st2中。這個例子很好的說明了,cin是從緩衝區讀取資料的。

#include

using

namespace

std;

int main()

遇到空格並繼續讀入:(a b(回車))

遇到回車換行放入緩衝區:(a(回車))

cin.getline(c,3)在執行的時候,應該只能接受2個字元,第三個字元為空字元。如果輸入超過的時候,第二個之後的字元應該還在快取區,cin是從快取區中讀取,但是cin並沒有停留在讀取介面,也沒有從快取區中讀入(如果將ch1初始化為乙個字元,那麼ch1還是為當初的字元,從此可以證明第二局的cin語句並沒有執行),然後直接跳到了最後乙個輸出語句。此時的cin函式發生了錯誤,並不再讀取。通過cin.clear( )可以知道,它的標誌位置改變了。通過cin.clear( )復位,那麼cin可以從緩衝區再把剩餘的字元讀取出來。

此時問題解決了。然後我們在通過cin.fail( )去檢視是否出錯,該函式是判斷流輸入是否失敗,失敗返回1,成功返回0。若失敗了,那麼cin函式是不會執行的。

通過以下**,可以看出它的返回值:

總結:所以當cin發生錯誤的時候,可以通過錯誤機制,對應著去找解決方法,通常在緩衝區用的函式有cin.clear(),cin.fail(), cin.bad(), cin.good(), cin.ignore()

C 常見的cin的錯誤處理

寫程式時想要用 cin 對輸入的合法性檢查,於是學習了一下 cin.fail 函式,順便學習了類似的一些函式。cin 物件包含了乙個描述流狀態的資料成員。流狀態有 3 個標誌位 eofbit,badbit 和 failbit。當 cin 操作到達檔案末尾時,eofbit 置 1。當流被破壞時,bad...

MySql錯誤處理 錯誤處理的例子

有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...

MySql錯誤處理(三) 錯誤處理的例子

mysql錯誤處理 三 錯誤處理的例子 有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not foun...