有誰知道是否可以在switch語句中包含一個範圍(如果是這樣,如何)?在C語言中切換語句
例如:
switch (x)
{
case 1:
//do something
break;
case 2..8:
//do something else
break;
default:
break;
}
編譯器似乎並不喜歡這種語法 - 它也不喜歡:
case <= 8:
有誰知道是否可以在switch語句中包含一個範圍(如果是這樣,如何)?在C語言中切換語句
例如:
switch (x)
{
case 1:
//do something
break;
case 2..8:
//do something else
break;
default:
break;
}
編譯器似乎並不喜歡這種語法 - 它也不喜歡:
case <= 8:
不,這是不可能的。有幾個方法,我已經在過去做到了這一點:
固定編碼:
switch (x)
{
case 1:
//do something
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
//do something else
break;
default:
break;
}
在組合與if {}
聲明:
switch (x)
{
case 1:
//do something
break;
default:
if (x <= 8)
{
// do something
}
else
{
// throw exception
}
break;
}
簡短的回答:沒有。可以在那裏編寫所有的情況,但是不支持這種範圍表示法。
我認爲你必須在這裏使用if
陳述或者切換到那裏是情況descrimination提供更好的支持的語言。
如果你有那麼少數情況下,if
會更喜歡。
你可以通過案件辦理情況的明確的情況下,如果你只有一個範圍,在默認情況下處理它。
你可以做
case 2:
case 3:
case 4:
...
case 8:
// code here
break
[ - ]這個答案已經由Andy Shellam提供了。 – 2016-04-22 17:56:03
沒有,但你可以這樣寫,所以你至少避免// do something else
部分多次寫。
switch (x)
{
case 1:
//do something
break;
case 2: case 3: case 4: case 5: case 6: case 7: case 8:
//do something else
break;
default:
break;
}
上面已經提到過,但關於格式化的重點:)我關心第二個示例的通信 – 2017-12-08 04:28:02
您可以通過使用情況下掉落:
switch (x)
{
case 1:
//do something
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
//do something else
break;
default:
break;
}
但我只是使用,如果這樣。
[ - ]這個答案已經由Andy Shellam提供。 – 2016-04-22 17:54:50
你不能在一個開關的情況下使用任何條件語句。
如果要執行的代碼同線不同的選項,那麼你可以做一兩件事:
switch (i)
{
case 0:
case 1:
case 2:
case 3:
//do something here.
break;
default:
//do something here.
break;
}
[ - ]以上答案已經由Andy Shellam提供。 – 2016-04-22 17:56:57
一種可能是你的範圍轉換成整數。例如:
//assuming x>=9 or if (x <= 0) return;
switch((x+12)/7)
{ case 1:Console.WriteLine("one");
break;
case 2:Console.WriteLine("2 through 8 inclusive");
break;
case 3:Console.WriteLine("9 through 15 inclusive");
break;
default: Console.WriteLine("16 or more");
break;
}
雖然這是不可能的,當我最初問到這個問題,通過C#模式匹配的奇蹟,現在是(在C#7):
switch (i)
{
case var test when test <= 2:
Console.WriteLine("Less than 2");
break;
case var test when test > 2 && test < 10:
Console.WriteLine("Between 2 and 10");
break;
case var test when test >= 10:
Console.WriteLine("10 or more");
break;
}
+1。第一個讓我想傷害某人。 :) – 2010-03-31 12:13:17
第一個例子看起來很奇怪:我知道它對於例如Java來說是對的,但對於'switch [MSDN entry](https://msdn.microsoft.com/zh-cn/library/06tc147t.aspx) '明確指出,編譯器不會允許「跌落」。或者我在這裏錯過了什麼? – Informagic 2016-07-01 12:13:18
好的,顯然這是允許「空」的情況下。 – Informagic 2016-07-01 13:36:45