可能是重复的,但找不到相同的。
假设我有以下C
代码:
int a;
printf("Enter number :");
scanf("%d",&a); // suppose entered only an integer
// ignoring return value of scanf()
我有一个案例来检查a
是zero
还是non-zero
。
if(a)
printf("%d is non-zero",a);
else
printf("%d is zero",a);
一切都很好if-else
,我也知道if-else
实现这一点的其他变体。但是问题来了,switch-case
因为它说我们可以实现switch-case
我们可以做的一切if-else
。但是下面的代码失败了。
switch(a)
{
case a:
printf("%d is non-zero",a);
break;
default:
printf("%d is zero",a);
break;
}
我也知道在上面的代码中扭转这种情况,如下所示,我会得到我的答案。
switch(a)
{
case 0:
printf("%d is zero",a);
break;
default :
printf("%d is non-zero",a);
break;
}
但问题是,为什么?为什么if(a)
有效而case a:
无效?是switch-case
编译时操作和if()
运行时?