嗨!这里是C语言小白。
因为考试需要开始学习C语言了,敲惯了JavaScript后,敲C语言实现课后习题,敲出来的结果总是意料之外!每每排错,都是if语句有问题,外层if语句的else子句被当成外层if语句里内嵌if语句的子句了!
我真是太不习惯C敲if语句的形式了!今天我就要把它拿下!
- 标准形式的if语句(if语句有两种形式:一种是带else子句的,一种是不带else子句的
//带else子句的if语句
if (x > y)
printf("表达式为真,进入if语句");
else
printf("表达式为假,进入else子句");
- 嵌套的if语句
if (x > y)
printf("表达式为真,进入外层if语句\n");
if (x == y)
printf("x=y我是嵌套的if语句\n");
else
printf("表达式为假,进入嵌套的else子句\n");
虽然按格式上,我们表达的是外层if语句带了else子句。
但程序执行的情况是:当x>y时进入外层if语句,执行printf函数,判断x是否等于y,由于内嵌的if语句是从x大于y为真进入的,说明x不可能等于y,接着程序执行内嵌的if语句的else子句,打印"表达式为假,进入嵌套的else子句"。
程序执行结果:
看到执行结果的你懵了,你的else子句是写给外层if语句的else子句,怎么变成内层的了。是因为if与else的配对规则:else总是和在它前面最近的未配对的if相配对
如何解决C中if语句(带else子句)的坑呢?
- 内嵌的if语句也应包括else部分;——————(这样就不怕子句的if被别人的else抢走啦)
- 把内嵌的if语句放入外层的else子句中;——————(这样内嵌的if语句就跑在else子句后了,else子句不会找它代码块里的if)
- 加大括号,限定if语句的范围;
- 程序写成锯齿形,同一层次的if和else在同一列上;
C语言代码规范——齿轮形
//if与else后只含一个内嵌操作语句可不用缩进,直接放在if/else后
if (x > y) printf("x大于y");
else
printf("x小于等于y");
if (x == y) printf("x等于y");
else
if (x < y) printf("x小于y");
else printf("同一层次的if语句放一起");
//缩进的if语句
if (x > y)
printf("x大于y");
else
printf("x小于等于y");
if (x == y)
printf("x等于y");
else
if (x < y)
printf("x小于y");
else
printf("同一层次的if语句放一起");