【问题标题】:Syntax for case range in C? [duplicate]C中大小写范围的语法? [复制]
【发布时间】:2018-03-16 15:03:42
【问题描述】:

我想在我的代码中创建一个 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中做到这一点。你必须使用if
  • 罗杰。我试试,谢谢。
  • 这个问题确实与“已经回答”的其他问题有所不同。在这种情况下,范围的大小相同。尝试像这样利用固有的楼层划分switch( (number-1)/5000 ) { case 0: break; case 1: break; case 2: break; default: }

标签: c switch-statement case


【解决方案1】:

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


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

【讨论】:

  • 是的,我最终做到了,谢谢。
  • @Hitopopamus:我希望是 if 块,而不是 switch ;-)
【解决方案2】:

正如@UnholySheep 在 cmets 中所说,您不能这样做。不适用于标准 C。尝试使用 if:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多