有谁知道是否可以在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