2011-01-09 13 views
1

嘗試和catch語句對於實際的例外很容易,但我怎樣才能爲自我強加的限制編寫try/catch?自我強加的嘗試/捕獲不需要的整數

例如,如果我從cin得到一個整數,我想要是2,4或7,並打印出「該數字無效」並再試一次,那麼將如何寫入C++?

+6

絕對*不*有例外。你想要一個循環。 – 2011-01-09 04:21:01

回答

3

@Adam Rosenfield是正確的:例外應該保留爲例外情況 - 即,你不希望發生的事情(或至少不是很經常)。預計會發生用戶輸入錯誤數據 - 頻繁發生。

因爲你總是想要閱讀的輸入至少一次,這是其中的do/while循環是有道理的情況:

do { 
    std::cin >> number; 
} while (number != 2 && number != 4 && number != 7); 
1

你也許可以做到這一點使用一個簡單的循環while

while (true) { 
    int value = /* ... read a number ... */ 
    if (value == 2 || value == 4 || value == 7) break; 

    /* ... report an error ... */ 
} 

你是正確的,你不應該使用的try/catch在這裏。這些是處理真正不可恢復的錯誤的重量級原語。在這種情況下,這個簡單的輕量級循環應該工作得很好。

+0

限制對真正不可恢復的錯誤使用例外情況有點多。但你說得對,他們不應該用於「正常」的控制流程。 – Ben 2011-01-09 04:32:30

+0

真的......這對我來說有點苛刻。我習慣於在I/O故障,網絡傳輸錯誤等情況下看到異常情況,在這種情況下,您所要做的僅僅是不起作用,而不得不退而求其次。 – templatetypedef 2011-01-09 04:35:47