可能重复,但找不到相同的.
假设我有以下C代码:
int a; printf("Enter number :"); scanf("%d",&a); // suppose entered only an integer // ignoring return value of scanf()
我得到一个案例来检查a是零还是非零.
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; }
但问题是,为什么?为什么(a)在案件a:不是有效的情况下? switch-case是一个编译时操作和if()运行时?