if語句

if语句

编程语言
if语句又称条件语句,用来解决分支问题[1]。是指编程语言(包括c语言、C#、VB、java、汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。
  • 中文名:if语句
  • 外文名:if statement
  • 适用领域:计算机编程语言
  • 所属学科:
  • 类型:条件判断
  • 结果:真或假
  • 结 构:选择结构

概述

if语句是指编程语言(包括c语言、C++、C#、java、VB、汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。

if的返回值为真或假,可以用bool型变量进行存储,占用一字节。

一般形式

if语句的一般形式如下:

if(表达式)语句1

[else语句2]

if语句中的“表达式”可以是关系表达式、逻辑表达式,甚至是数值表达式。

其中最直观、最容易理解的是关系表达式。所谓关系表达式就是两个数值进行比较的式子。

C语言if语句

c语言提供了2种形式的if语句: 

1、if(表达式)语句1

例如:

1

2

if(x>y)

printf("%d",x);

2、if(表达式)

语句1

else

语句2

例如:

1

2

3

4

if(x>y)

    printf("%d",x);

else 

    printf("%d",y);

空悬else

问题描述

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;

}

编码风格建议

总是使用复合语句括号以避免在以后修改代码时可能出现的混淆或错误。

C#中if语句

作用

if语句根据布尔表达式的结果选择执行两个不同的代码块。

语法

if语句的语法如下所示(if和else是C#的关键字):

if(booleanExpression)

statement-1;

else

statement-2;

如果booleanExpression(布尔表达式)求值为true,就运行statement-1;否则运行statement-2。else关键字和后续的statement-2是可选的。

如果没有else子句,而且booleanExpression求值为false,那么什么也不会发生,程序继续执行if语句之后的代码。注意,布尔表达式必须放在圆括号中,否则无法编译。

Shell中if语句

基本用法

if 执行批处理程序中的条件处理:

1

IF[NOT]ERRORLEVELnumbercommand

1

IF[NOT]string1==string2command

1

IF[NOT]EXISTfilenamecommand

NOT 指定只有条件为 false 的情况下, Windows XP 才应该执行该命令。

ERRORLEVEL number 如果最后运行的程序返回一个等于或大于指定数字的退出编码,指定条件为 true。

string1==string2 如果指定的文字字符串匹配,指定条件为 true。

EXIST filename 如果指定的文件名存在,指定条件为 true。

command 如果符合条件,指定要执行的命令。如果指定的条件为 FALSE,命令后可跟一个执行 ELSE关键字后的命令的 ELSE 命令。

ELSE 子句必须在 IF 之后出现在同一行上。例如:

1

2

3

4

5

IFEXISTfilename.(

delfilename.

)else(

echofilename.missing.

)

应为del命令需要一个新行终止,以下字句不会有效:

1

ifexistfilename.delfilename.elseechofilename.missing

由于else命令必须与if命令的尾端在同一行上,以下子句也不会有效:

1

2

ifexistfilename.delfilename.

elseechofilename.missing

如果都放在同一行上,以下子句有效:

1

ifexistfilename.(delfilename.)elseechofilename.missing

如果命令扩展名被起用,if会有如下改变:

1

IF[/I]string1compare-opstring2command

1

IFCMDEXTVERSIONnumbercommand

1

IFDEFINEDvariablecommand

比较运算符

equ - 等于

neq - 不等于

lss - 小于

leq - 小于或等于

gtr - 大于

geq - 大于或等于

/i 开关;如果该开关被指定,则说明要进行的字符串比较不分大小写。/i开关可以用于 IF 的 string1==string2 的形式上。

这些比较都是通用的;原因是,如果 string1 和 string2 都是由数字组成的,字符串会被转换成数字,进行数字比较。

CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它是在跟与命令扩展名有关联的内部版本号比较。第一个版本是 1。

每次对命令扩展名有相当大的增强时,版本号会增加一个。命令扩展名被停用时,CMDEXTVERSION 条件不是真的。

如果已定义环境变量,DEFINED 条件的作用跟 EXISTS 的一样,除了它取得一个环境变量,返回的结果是 true。

如果没有名为 ERRORLEVEL 的环境变量,%ERRORLEVEL%会扩充为 ERROLEVEL 当前数值的字符串表达式;否则,您会得到其数值。

运行程序后,以下语句说明 ERRORLEVEL 的用法:

1

2

3

4

5

gotoanswer%ERRORLEVEL%

:answer0

echoProgramhadreturncode0

:answer1

echoProgramhadreturncode1

您也可以使用以上的数字比较:

1

IF%ERRORLEVEL%LEQ1gotookay

如果没有名为 CMDCMDLINE 的环境变量,%CMDCMDLINE%将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始命令行;否则,您会得到其数值。

如果没有名为 CMDEXTVERSION 的环境变量,%CMDEXTVERSION% 会扩充为 CMDEXTVERSION 当前数值的字串符表达式;否则,您会得到其数值。 

相关词条

相关搜索

其它词条