C中案例范围的语法?

时间:2018-03-16 15:03:42

标签: c switch-statement case

我想在我的代码中创建一个switch语句,其代码遍及大范围的整数(1-15000),分为3个部分:1-5000,5001-10000,10001-15000。

我试过这样一次:

switch(number) {
    case 1 ... 1000: (statement here); 

这给了我一个关于“......”的语法错误 - “期待的a:”。

然后我尝试了:

switch (number) {
case 1:
case 5000:
    (statement);
    break;

这个方法确实编译但是没有按预期工作,对于没有明确列出的案例的错误答案。

在网上找不到任何其他建议。 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:7)

这在标准C中是不可能的,尽管有些编译器提供了作为编译器扩展 1 的范围切换。

在你的情况下,惯用的方法是写

if (number < 1){
    // oops
} else if (number <= 5000){
    // ToDo
} else if (number <= 10000){
    // ToDo
} else if (number <= 15000){
    // ToDo
} else {
    // oops
}

或者非常粗略的方法是编写利用整数除法的switch((number - 1) / 5000):将需要处理的案例映射到0,1和2。

1 https://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html

答案 1 :(得分:1)

正如@UnholySheep在评论中所说,你不能这样做。不符合标准C.尝试使用if:

if (my_variable >= minumum_value && my_variable <= maximum_value) {
// Do something
} else {
// Do something else
}