- 中文名
- if 语句
- 外文名
- if statement
- 所属领域
- 计算机编程语言
- 结 构
- 选择结构
- 类 型
- 条件判断
- 结 果
- 真或假
if语句是指编程语言(包括c语言、C++、C#、java、VB、汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。if的返回值为真或假,可以用bool型变量进行存储,占用一字节。
if语句的员挨试一般形式章凳炼院和如下备嫌:
if(表达甩地枣式)语句1
[e辨捉樱多榜lse语句2]
例如:
if(x>y)
printf("%d",x);
2、if(表达式)
语句1
else
语句2
例如:
if(x>y)
printf("%d",x);
else
printf("%d",y);
if-else 语句引入了一种二义性问题称为空悬else (dangling-else) 问题,这种问题出现在当if 子句多于else 子句时。问题是这些else 子句分别和哪一个if 子句匹配。例如:
if(minVal<=ivec[i])
if(minVal==ivec[i])
++occurs;
else
{
minVal=ivec[i];
occurs=1;
}
程序的缩进形式表明程序员相信else 应该与最外面的if 子句匹配,然而在C++中空悬else 二义性由以下规定来解决:else 子句与最后出现的未被匹配的if 子句相匹配。 [5]
在本例中if-else 语句实际的计算过程如下:
if(minVal<=ivec[i])
{
//空悬else的解释结果
if(minVal==ivec[i])
++occurs;
else
{
minVal=ivec[i];
occurs=1;
}
}
要想改变这种缺省的空悬else 匹配效果一种方法是把后来出现的if 放在复合语句中:
if(minVal<=ivec[i])
{
if(minVal==ivec[i])
++occurs;
}
else
{
minVal=ivec[i];
occurs=1;
}
if语句的语法如下所示(if和else是C#的关键字):
if(booleanExpression)
statement-1;
else
statement-2; [1]
如果booleanExpression(布尔表达式)求值为true,就运行statement-1;否则运行statement-2。else关键字和后续的statement-2是可选的。如果没有else子句,而且booleanExpression求值为false,那么什么也不会发生,程序继续执行if语句之后的代码。注意,布尔表达式必须放在圆括号中,否则无法编译。
IF[NOT]ERRORLEVELnumbercommand
IF[NOT]string1==string2command
IF[NOT]EXISTfilenamecommand
NOT 指定只有条件为 false 的情况下, Windows XP 才应该执行该命令。
ERRORLEVEL number 如果最后运行的程序返回一个等于或大于指定数字的退出编码,指定条件为 true。
EXIST filename 如果指定的文件名存在,指定条件为 true。
command 如果符合条件,指定要执行的命令。如果指定的条件为 FALSE,命令后可跟一个执行 ELSE
关键字后的命令的 ELSE 命令。
ELSE 子句必须在 IF 之后出现在同一行上。例如:
IFEXISTfilename.(
delfilename.
)else(
echofilename.missing.
)
应为del命令需要一个新行终止,以下字句不会有效:
ifexistfilename.delfilename.elseechofilename.missing
由于else命令必须与if命令的尾端在同一行上,以下子句也不会有效:
ifexistfilename.delfilename.
elseechofilename.missing
如果都放在同一行上,以下子句有效:
ifexistfilename.(delfilename.)elseechofilename.missing
如果命令扩展名被起用,if会有如下改变:
IF[/I]string1compare-opstring2command
IFCMDEXTVERSIONnumbercommand
IFDEFINEDvariablecommand
equ - 等于
neq - 不等于
lss - 小于
leq - 小于或等于
gtr - 大于
geq - 大于或等于
/i 开关;如果该开关被指定,则说明要进行的字符串比较不分大小写。/i开关可以用于 IF 的 string1==string2 的形式上。这些比较都是通用的;原因是,如果 string1 和 string2 都是由数字组成的,字符串会被转换成数字,进行数字比较。
CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它是在跟与命令扩展名有关联的内部版本号比较。第一个版本是 1。每次对命令扩展名有相当大的增强时,版本号会增加一个。命令扩展名被停用时,CMDEXTVERSION 条件不是真的。
如果没有名为 ERRORLEVEL 的环境变量,%ERRORLEVEL%会扩充为 ERROLEVEL 当前数值的字符串表达式;否则,您会得到其数值。运行程序后,以下语句说明 ERRORLEVEL 的用法:
gotoanswer%ERRORLEVEL%
:answer0
echoProgramhadreturncode0
:answer1
echoProgramhadreturncode1
您也可以使用以上的数字比较:
IF%ERRORLEVEL%LEQ1gotookay
