悬挂“else”
2016-03-10 00:03
106 查看
else匹配规则:与它上面的距离它最近的且在同一级语句块的一个未与else匹配的if语句匹配
初接触C语言的同志可能会犯下面这种错误
本意是想把else与第一个if语句匹配,但是因为第二个if语句也没有与之匹配的else语句,所以这个else会被编译器“判给”第二格if语句
解决这种错误的方式也很简单,每当写一个if()语句块时,都在后面跟一对大括号,把if()语句块的内容写在大括号里面,还有就是当if()语句块的逻辑写完了之后,立马在后面跟一个else()语句块,即使else()什么操作也不需要做,仅仅是一个空语句。
上面的例子中把第二个if()语句块封装在第一个if()语句块内,那么因为仅有的一个else()语句块与第一个if()语句块在同一个语句块(大括号里),所以他俩会匹配成功,因此,即使b = 0,第二个if()语句块的条件不满足,也不会执行else()语句块的语句。
初接触C语言的同志可能会犯下面这种错误
if(x == 0 if(y == 0) { printf("这里有两个if语句\n"); } else { printf("只有一个else语句,它将要与谁匹配呢?\n"); }
本意是想把else与第一个if语句匹配,但是因为第二个if语句也没有与之匹配的else语句,所以这个else会被编译器“判给”第二格if语句
解决这种错误的方式也很简单,每当写一个if()语句块时,都在后面跟一对大括号,把if()语句块的内容写在大括号里面,还有就是当if()语句块的逻辑写完了之后,立马在后面跟一个else()语句块,即使else()什么操作也不需要做,仅仅是一个空语句。
#include<stdio.h> int main() { int a = 10; int b = 0; if (a != 0) { printf("a != 0\n"); if (b != 0) { printf("b != 0\n"); } } else { printf("a = 0\n"); } system("pause"); return 0; }
上面的例子中把第二个if()语句块封装在第一个if()语句块内,那么因为仅有的一个else()语句块与第一个if()语句块在同一个语句块(大括号里),所以他俩会匹配成功,因此,即使b = 0,第二个if()语句块的条件不满足,也不会执行else()语句块的语句。
相关文章推荐
- Android Studio引用mipmap中引用.9图片报错
- redis持久化2
- 理解 Scroll Views
- 【数据结构二叉树复习】
- JavaScript设计模式之二:this、call和apply
- VIEWGOOD(远古)辽宁省电网演播室系统改造项目
- 后台管理系统无法登录或者验证码错误
- hibernate hql查询(需完善)
- spring 定时任务
- wrong number of arguments,java方法反射时数组参数的坑
- 商城开发之商城后台上传商品-上传商品图片篇
- 商城开发之商品分类表的设计、使用、管理
- 日志分析(三)任务链实现
- 日志分析(四)异常收集
- 日志分析(五)消息发送队列
- 日志分析(六)压测数据
- arm 声音卡顿
- CentOS6.5 安装vsftpd
- pgsql 安装及日常操作
- Java多态机制的特点