嘗試和catch語句對於實際的例外很容易,但我怎樣才能爲自我強加的限制編寫try/catch?自我強加的嘗試/捕獲不需要的整數
例如,如果我從cin得到一個整數,我想要是2,4或7,並打印出「該數字無效」並再試一次,那麼將如何寫入C++?
嘗試和catch語句對於實際的例外很容易,但我怎樣才能爲自我強加的限制編寫try/catch?自我強加的嘗試/捕獲不需要的整數
例如,如果我從cin得到一個整數,我想要是2,4或7,並打印出「該數字無效」並再試一次,那麼將如何寫入C++?
@Adam Rosenfield是正確的:例外應該保留爲例外情況 - 即,你不希望發生的事情(或至少不是很經常)。預計會發生用戶輸入錯誤數據 - 頻繁發生。
因爲你總是想要閱讀的輸入至少一次,這是其中的do/while循環是有道理的情況:
do {
std::cin >> number;
} while (number != 2 && number != 4 && number != 7);
你也許可以做到這一點使用一個簡單的循環while
:
while (true) {
int value = /* ... read a number ... */
if (value == 2 || value == 4 || value == 7) break;
/* ... report an error ... */
}
你是正確的,你不應該使用的try/catch在這裏。這些是處理真正不可恢復的錯誤的重量級原語。在這種情況下,這個簡單的輕量級循環應該工作得很好。
限制對真正不可恢復的錯誤使用例外情況有點多。但你說得對,他們不應該用於「正常」的控制流程。 – Ben 2011-01-09 04:32:30
真的......這對我來說有點苛刻。我習慣於在I/O故障,網絡傳輸錯誤等情況下看到異常情況,在這種情況下,您所要做的僅僅是不起作用,而不得不退而求其次。 – templatetypedef 2011-01-09 04:35:47
絕對*不*有例外。你想要一個循環。 – 2011-01-09 04:21:01