如何在C中的switch case语句中使用范围?

use*_*621 11 c switch-statement

我的逻辑是:

if number is between 1 to 10, execute first case statement
if number is from 20 to 30, execute second case statement
Run Code Online (Sandbox Code Playgroud)

有没有下面的解决方案?

case '1' ... '10':
case '20' ... '30':
Run Code Online (Sandbox Code Playgroud)

Bas*_*tch 21

GCC编译器支持,作为语言的扩展,案件范围,如:

 switch(i) {
    case 0 ... 9: return true;
    default: return false;
 }
Run Code Online (Sandbox Code Playgroud)

Clang/LLVM也接受此语言扩展.因此,如果您能够将代码限制在GCC和Clang编译器中,请使用它.

另请参见.

我不知道为什么这个扩展没有包含在C11标准中.


Mah*_*mer 5

void SwitchDemo(int value)
   {
   switch(value / 10)
      {
      case 0: ...; break; // 0 - 9
      case 1: ...; break; // 10 - 19
      ...
      }
   }
Run Code Online (Sandbox Code Playgroud)

或者,具体到问题范围:

void SwitchDemo(int value)
   {
   switch((value-1) / 10)
      {
      case 0: ...; break; // 1 - 10
      case 1: ...; break; // 11 - 20
      ...
      }
   }
Run Code Online (Sandbox Code Playgroud)


rit*_*t93 4

选项 1:使用case 0for 0-9case 1for11-20等。

选项 2:使用if

选项 3:

另一种破旧的方法是使用这样的失败案例:

#include <stdio.h>

int main(void) {
    int i=1;

    for(i=1;i<=25;i++)
    {
    switch(i)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
        case 10:
            printf("%d  is in between 1-10\n", i);
            break;

        case 11:
        case 12:
        case 13:
        case 14:
        case 15:
        case 16:
        case 17:
        case 18:
        case 19:
        case 20:
            printf("%d  is in between 11-20\n", i);
            break;

        default:
            printf("%d  is above 20\n", i);
    }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

1  is in between 1-10
2  is in between 1-10
3  is in between 1-10
4  is in between 1-10
5  is in between 1-10
6  is in between 1-10
7  is in between 1-10
8  is in between 1-10
9  is in between 1-10
10  is in between 1-10
11  is in between 11-20
12  is in between 11-20
13  is in between 11-20
14  is in between 11-20
15  is in between 11-20
16  is in between 11-20
17  is in between 11-20
18  is in between 11-20
19  is in between 11-20
20  is in between 11-20
21  is above 20
22  is above 20
23  is above 20
24  is above 20
25  is above 20
Run Code Online (Sandbox Code Playgroud)

https://ideone.com/Cw6HDO

  • 在这种情况下,“switch”可能不是正确的选择。 (3认同)
  • 如果您必须检查数千个数字,您应该在原来的问题中提到这一点。 (2认同)