C语言规定else优先与前面最靠近它且未配对的if成一对!
情景引入:
#include#include 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,则没有相应的语句与之对应,也就不会输出相应结果,不符合题目意思!
总结: 在写分支语句时,不论if或者else后面跟的是一条语句还是多条语句,最好都用花括号括起来,以免出现程序的逻辑匹配错误!


