例如,-
short a;
cin>>a。
cout<<a。
現在,如果我插入一個大于32,767的值怎么辦?程式就會崩潰。所以我知道如何處理例外,但是必須有正確的事情發生,才能為傳入的錯誤事件拋出例外。就像在一個計算器中,對于除以零的例外,你會寫到
try {if (divider = 0){then do stuff}}。但在我上面的例子中,沒有正確的事件,直接發生了錯誤的事件。我的意思是,在我的計算器例子中,程式可以檢測到除數為0,一個錯誤的事件即將發生,但是在我的例子中,我不能做這樣的事情- try{if(a> 32767) {do stuff}},在這里我的程式無法檢測到錯誤事件的發生,因為錯誤事件甚至是立即發生的,也就是說,程式無法檢測到我輸入的值超過了它能承受的范圍,因為它無論如何也無法檢查我的值,因為它大于它的最大值限制。那么我怎樣才能防止這種例外呢?
uj5u.com熱心網友回復:
默認情況下,iostreams根本不拋出例外。你可以通過檢查輸入流的狀態來處理無效的輸入。下面是不會崩潰的固定版本:
short a;
if(std::cin > > a) {
std::cout << a;
} else {
std::cout << "不適合,或者不是一個數字"。
如果你喜歡使用iostream例外,請參閱Quentin的答案,了解如何啟用iostream例外。
uj5u.com熱心網友回復:
好的想法。@eeorika's anwser向你展示了如何查詢I/O流,以便在事后知道決議失敗。
你也可以通過使用流的exceptions成員函式來啟用例外:
std::cin.exceptions(std::ios_base::badbit | std::ios_base::failbit)。
short s;
//將拋出一個`std::ios_base::failure`型別的例外,如果數字不合適。
std::cin >> s。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/320023.html
標籤:
上一篇:檢查例外型別而不考慮TC#
下一篇:如何獲取一個視窗的UI元素?迅捷
