C++ 常見的cin的錯誤處理


寫程序時想要用 cin 對輸入的合法性檢查,於是學習了一下 cin.fail() 函數,順便學習了類似的一些函數。

cin 對象包含了一個描述流狀態的數據成員。流狀態有 3 個標志位:eofbit,badbit 和 failbit。

當 cin 操作到達文件末尾時,eofbit 置 1。

當流被破壞時,badbit 置 1。例如:試圖讀取不可訪問的文件、寫入寫保護的磁盤、寫入的設備剩余空間不足等。

cin 操作未能讀取到預期的字符時 failbit 會置 1。例如:要輸入到一個整型變量中,輸入的卻是字符時 failbit 置 1。I/O 失敗時 failbit 也可能置 1。

如果 3 個狀態位都為 0 表示一切順利。

下面介紹一些檢查或改變流狀態的方法。

  • eof()

如果 eofbit 為 1 返回 true。

所以可以用 cin.eof() 來判斷是否讀到文件尾。

  • good()

如果流可以使用,也就是 3 個狀態位都為 0,返回 true。

只有 cin.good() 為 true 時,while(cin >> input) 才返回 true。

  • bad()

如果 badbit 為 1 返回 true。

  • fail()

如果 failbit 或 badbit 為 1 返回 true。所以與 bad() 一樣的情況會返回 true,輸入一個類型不匹配的字符也是返回 true。

可用於檢查輸入是否合法。

int a;
cin >> a;
if(cin.fail()) {
    cout << "Input error" << endl;
}

注意:如果輸入不合法重新輸入,failbit 是不會自動重置的。

  • rdstate()

返回流狀態。

  • clear(iostate s)

狀態位置位后不會改變。因此要重置狀態位需使用 clear(iostate s)。該方法將所有的狀態位都設置為 s,其中 s 默認為 0。也就是 clear() 將所有狀態位清零。

參考

《C++ Primer Plus》 Stephen Prata

C++之cin.eof, cin.bad, cin.good, cin.fail, cin.clear


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM