C语言规定else优先与前面最靠近它且未配对的if成一对!
情景引入:
#include<stdio.h>
#include<time.h>
int main(void){
int a, b, op;
srand(time(NULL));
a = rand() % 20; b = rand() % 20;
op = rand() % 4;
if(op == 0)
printf("%d+%d=", a, b);
else
if(op == 1) printf("%d-%d=", a, b);
else
if(op == 2)
{
if(b != 0) printf("%d/%d=", a, b);
}
else printf("%d*%d=", a, b);
return 0;
}
问题导入:
疑难解析:
由于C语言规定else优先与前面最靠近它且未配对的if成一对!
因此,如果把花括号删去,那么以下代码
else printf("%d*%d=", a, b);
就会与它最近的且未配对的if语句进行匹配,在这里就是 if(b != 0) printf("%d/%d=", a, b);
那么这样会出现的结果是:
if(op == 2)
if(b != 0) printf("%d/%d=", a, b);
else printf("%d*%d=", a, b);
即在op等于2的前提下,如果b不等于0,则输出
printf("%d/%d=", a, b);
如果b等于0,则输出
printf("%d*%d=", a, b);
由于在源代码中,b作为分母,显然不能为0,因此按道理不可能进行输出!
再者,如果op等于3,则没有相应的语句与之对应,也就不会输出相应结果,不符合题目意思!