if语句
if语句是指编程语言(包括c语言,C#,VB,java,汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。
目录
if语句是指编程语言(包括c语言,C#,,java,VB,汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。if的返回值为真或假,可以用bool型变量进行存储,占用一字节。
三种形式
c语言提供了三种形式的if语句:
1、if(表达式)语句。
例如:
1 | if (x>y) printf ( "%d" ,x); |
2、if(表达式)语句1 else 语句2
例如:
1 2 | if (x>y) printf ( "%d" ,x); else printf ( "%d" ,y); |
3、if(表达式1)语句1
else if(表达式2)语句2
else if(表达式3)语句3
else if(表达式m)语句m
else 语句 n
在每个语句中,可以有多个语句,但需要加上大括号
例:
1 | if (x>y){ printf ( "%d" ,x); break ;} |
问题描述
if-else 语句引入了一种二义性问题称为空悬else (dangling-else) 问题,这种问题出现在当if 子句多于else 子句时。问题是这些else 子句分别和哪一个if 子句匹配。例如
1 2 3 4 5 6 7 8 | if (minVal<=ivec[i]) if (minVal==ivec[i]) ++occurs; else { minVal=ivec[i]; occurs=1; } |
程序的缩进形式表明程序员相信else 应该与最外面的if 子句匹配,然而在C++中空悬else 二义性由以下规定来解决:else 子句与最后出现的未被匹配的if 子句相匹配。
在本例中if-else 语句实际的计算过程如下
1 2 3 4 5 6 7 8 9 10 11 | if (minVal<=ivec[i]) { //空悬else的解释结果 if (minVal==ivec[i]) ++occurs; else { minVal=ivec[i]; occurs=1; } } |
解决方式
要想改变这种缺省的空悬else 匹配效果一种方法是把后来出现的if 放在复合语句中
1 2 3 4 5 6 7 8 9 10 | if (minVal<=ivec[i]) { if (minVal==ivec[i]) ++occurs; } else { minVal=ivec[i]; occurs=1; } |
编码风格建议
总是使用复合语句括号以避免在以后修改代码时可能出现的混淆或错误。
附件列表
故事内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。