在C++中,處理stdin
輸入錯誤可以通過檢查輸入流的狀態來完成。當輸入流遇到錯誤時,例如輸入的數據類型與期望的不匹配,它會設置一個內部標志,稱為錯誤狀態。你可以使用std::istream
的成員函數來檢查和處理這些錯誤。
以下是一個簡單的示例,展示了如何處理stdin
輸入錯誤:
#include<iostream>
#include<limits>
int main() {
int input;
std::cout << "請輸入一個整數: ";
std::cin >> input;
// 檢查輸入是否有效
if (std::cin.fail()) {
// 清除錯誤狀態
std::cin.clear();
// 忽略錯誤字符
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cerr << "輸入錯誤,請輸入一個整數。"<< std::endl;
} else {
std::cout << "你輸入的整數是: "<< input<< std::endl;
}
return 0;
}
在這個示例中,我們首先嘗試從stdin
讀取一個整數。如果輸入失敗(例如,用戶輸入了一個非數字字符),std::cin.fail()
將返回true
。然后,我們使用std::cin.clear()
清除錯誤狀態,并使用std::cin.ignore()
忽略錯誤字符。最后,我們向用戶顯示一條錯誤消息。
注意,std::numeric_limits<std::streamsize>::max()
是一個非常大的值,用于確保ignore()
函數能夠忽略所有錯誤字符,直到遇到換行符。