我的程序等待用戶輸入,並在適當時處理它。我需要檢查用戶輸入以確保它符合某些標準,如果它不符合所有這些標準,它將被拒絕。優雅地檢查用戶輸入錯誤
僞代碼是一樣的東西:
if (fulfills_condition_1)
{
if (fulfills_condition_2)
{
if (fulfills_condition_3)
{
/*process message*/
}
else
cout << error_message_3; //where error_message_1 is a string detailing error
}
else
cout << error_message_2; //where error_message_2 is a string detailing error
}
else
cout << error_message_1; //where error_message_3 is a string detailing error
有這種可能性,即這些條件的數量可能會增加,我想知道是否有一個更合適的方法來表示這個使用交換機或類似的東西而不是大量的級聯if
陳述。
我知道有使用
if (fulfills_condition_1 && fulfills_condition_2 && fulfills_condition_3)
/*process message*/
else
error_message; //"this message is not formatted properly"
的可能性,但是這是比第一用處不大,並沒有說哪裏的問題。
的條件大致可安排在日益增加的重要性,即檢查condition_1
比檢查condition_3
更重要,所以if
報表做的工作 - 但有一般這樣做的更好的辦法?
例外..... – 2013-03-14 08:55:29
您是否考慮過使用try-catch和異常類進行負面條件檢查,該類能準確反映首先觸發問題的條件? – WhozCraig 2013-03-14 08:55:51
這取決於你的輸入有多複雜。我將創建一個DSL來聲明輸入是如何有效的,並創建表示該DSL的對象,然後說驗證該輸入。 – 2013-03-14 09:02:08