c - C 中 case 范围的语法?

标签 c switch-statement case

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

我尝试过一次,如下:

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

这给了我一个关于“...”-“需要一个:”的语法错误。

然后我尝试了:

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

此方法确实可以编译,但没有按预期工作,对于未明确列出的情况给出了错误的答案。

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

最佳答案

这在标准 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

关于c - C 中 case 范围的语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49323861/

相关文章:

c - 数组段错误

代码不编译 : error C2099: initializer is not a constant

c - 如果包含额外的头文件如何处理?

c++ - 有没有办法让开关检查2个参数?

tsql - T SQL case 语句,带参数的主次顺序

mysql - sql分组计算

php - php 中的 Mysqli Case 语句(更新)

c - 为什么 fgets 返回错误的字符串?

ios - 无法通过按住 Ctrl 并从元素中拖动来创建新操作

javascript - 这个 switch 语句和 jQuery 有什么问题?