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;
其余代码类似。我收到case (at>0 && at<5) :
答案 0 :(得分:10)
我担心这是不可能的。引用C11
,章节§6.8.4.2
每个
case
标签的表达式应为整数常量表达式,而不是两个 同一switch
语句中的大小写常量表达式应具有相同的值 转换后。 [....]
因此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
否则,如果您使用gcc
扩展程序即可,则可以使用 case-range syntax ,例如
switch(at){
case 1 ... 4:
printf("Average Time Taken (Hrs)\n%d.0",at);
printf("Your Salary is Rs.%d",pj*1500 + 5000);
break;
答案 1 :(得分:4)
switch语句中的case值必须是编译时常量(例如文字,或静态const,或#define到其中之一)。对于您要做的事情,您需要一个else if
链:
if (0 < at && at < 5) {
printf("Average Time Taken (Hrs)\n%d.0",at);
printf("Your Salary is Rs.%d",pj*1500 + 5000);
} else if (5 <= at && at < 10) {
// Your code here
请注意,我已将参数反转到第一个比较(和方向)。如果您对同一个变量进行了多次比较,我发现如果它们都在同一个方向上会更容易阅读。