C中案例范围的语法?

Hit*_*mus -2 c case switch-statement

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

我试过这样一次:

switch(number) {
    case 1 ... 1000: (statement here); 
Run Code Online (Sandbox Code Playgroud)

这给了我一个关于"......"的语法错误 - "预期的a:".

然后我尝试了:

switch (number) {
case 1:
case 5000:
    (statement);
    break;
Run Code Online (Sandbox Code Playgroud)

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

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

Bat*_*eba 7

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

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

if (number < 1){
    // oops
} else if (number <= 5000){
    // ToDo
} else if (number <= 10000){
    // ToDo
} else if (number <= 15000){
    // ToDo
} else {
    // oops
}
Run Code Online (Sandbox Code Playgroud)

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


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