2011-07-07 96 views
3

如何將以下if =語句轉換爲switch-statement而無需爲該間隔(41-49)之間的每個數字創建一個case?可能嗎?將if語句轉換爲switch語句

if (num < 50 && num > 40) 
{ 
    printf("correct!"); 
} 
+2

用什麼語言? C? C++?還有別的嗎? – Oded

+3

而_why_你想轉換這樣一個表達式嗎? – Oded

回答

0
bool criteria1 = (num < 50 && num > 40); 
switch criteria1: ... 

這可能導致多級決策網絡..可怕嗎?

+0

是布爾值這個唯一的方法嗎?還有另一種方法嗎?我可以將條件附加到案件嗎?只是好奇。 – wadafarfar

+0

@wadafarfar,如果你想要的語言支持在評估(...)時返回true | false值並且它們被switch語句看到 - 那麼是的。 'switch(condition)true:code1; false:code2;結束;'會工作。爲此寫一個測試? –

0

在C或C++中(因爲您使用的是printf,我假設它就是這樣),所以需要爲每個選項枚舉個案。

switch/caseif之間的唯一區別是編譯器可以將其轉換爲計算出的goto而不是檢查範圍。如果switch/case支持範圍,那將打破開放這個優化的可能性的目的。

1

你必須枚舉交換機的每個案例。編譯器將其轉換爲跳轉表,所以不能使用範圍。但是,您可以有多個案例使用相同的代碼塊,這可能更接近您想要的。

switch(num) { 
    case 41: 
    case 42: 
    case 43: 
    case 44: 
    case 45: 
    case 46: 
    case 47: 
    case 48: 
    case 49: 
     printf("correct!"); 
     break; 
    default: 
     break; 
} 
1

這是怎麼回事?

switch ((num-41)/9) { 
case 0: 
    printf("correct!"); 
    break; 
}