为什么我的代码使用逻辑表达式作为案例标签会引发错误?

Win*_*Key -1 c switch-statement

switch(at){
case (at>0 && at<5) :
        printf("Average Time Taken (Hrs)\n%d.0",at);
        printf("Your Salary is Rs.%d",pj*1500 + 5000);
        break;
Run Code Online (Sandbox Code Playgroud)

其余的代码是相似的.我收到了这个错误case (at>0 && at<5) :

Sou*_*osh 10

我担心这是不可能的.引用C11,第6.8.4.2章

每个case标签的表达式应为整数常量表达式,并且同一switch语句中的两个case常量表达式在转换后不应具有相同的值.[....]

所以case标签表达式不能是运行时生成的值依赖.

您可以使用直通式语法来实现您想要的功能,例如

switch(at){
case 1:
case 2:
case 3:
case 4:
        printf("Average Time Taken (Hrs)\n%d.0",at);
        printf("Your Salary is Rs.%d",pj*1500 + 5000);
        break;

  //some other case
Run Code Online (Sandbox Code Playgroud)

否则,如果你确定使用gcc的扩展,可以使用的情况下,范围语法,像

switch(at){
case 1 ... 4:
        printf("Average Time Taken (Hrs)\n%d.0",at);
        printf("Your Salary is Rs.%d",pj*1500 + 5000);
        break;
Run Code Online (Sandbox Code Playgroud)