词条 | if语句 |
释义 | if语句是指编程语言(包括c语言,C#,VB,汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。if的返回值为真或假,可以用bool型变量进行存储,占用一字节 c语言提供了三种形式的if语句: 1、If(表达式)语句。 例如: If(x>y)printf("%d",x); 2、If(表达式)语句1 else 语句2 例如: If(x>y)printf("%d",x); else print f("%d",y); 3、If(表达式1)语句1 else If(表达式2)语句2 else If(表达式3)语句3 。 。 。 else If(表达式m)语句m else 语句 n 在每个语句中,可以有多个语句,但需要加上大括号 例:If(x>y) {printf("%d",x); break;} 3.if条件语句的隐蔽用法 变量1=(变量2or语句2>变量3or语句3)?变量4:变量5; 。 。 。 注意点:括号加在 " = " 与 " ? "之间,而且不可少。 此处有一个实例:测试数据的有效性。 if(!hUsbDevice){ //|| !ConfigIndex || !CurInterface || !UsbFuncs RETAILMSG(1,(TEXT("In the USBDeviceAttach gain the Invalid parameter : !hUsbDevice\\r\"))); return NULL; } if(!hUsbDevice || !UsbFuncs ){ //|| !ConfigIndex || !CurInterface RETAILMSG(1,(TEXT("In the USBDeviceAttach gain the Invalid parameter: hUsbDevice || !UsbFuncs \\r\"))); return NULL; } if(!hUsbDevice || !UsbFuncs || !CurInterface ){ //|| !ConfigIndex RETAILMSG(1,(TEXT("In the USBDeviceAttach gain the Invalid parameter: hUsbDevice || !UsbFuncs || !CurInterface\\r\"))); return NULL; } if-else语句引入的问题-空悬else问题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 子句相匹配。 在本例中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 [NOT] ERRORLEVEL number command IF [NOT] string1==string2 command IF [NOT] EXIST filename command NOT 指定只有条件为 false 的情况下, Windows XP 才 应该执行该命令。 ERRORLEVEL number 如果最后运行的程序返回一个等于或大于 指定数字的退出编码,指定条件为 true。 string1==string2 如果指定的文字字符串匹配,指定条件为 true。 EXIST filename 如果指定的文件名存在,指定条件为 true。 command 如果符合条件,指定要执行的命令。如果指定的 条件为 FALSE,命令后可跟一个执行 ELSE 关键字后的命令的 ELSE 命令。 ELSE 子句必须在 IF 之后出现在同一行上。例如: IF EXIST filename. ( del filename. )else( echo filename. missing. ) 应为del命令需要一个新行终止,以下字句不会有效: if exist filename. del filename. else echo filename. missing 由于else命令必须与if命令的尾端在同一行上,以下子句也不会有效: if exist filename. del filename. else echo filename. missing 如果都放在同一行上,以下子句有效: if exist filename. (del filename.) else echo filename. missing 如果命令扩展名被起用,if会有如下改变 IF [/I] string1 compare-op string2 command IF CMDEXTVERSION number command IF DEFINED variable command 其中比较运算符可以是: equ - 等于 neq - 不等于 lss - 小于 leq - 小于或等于 gtr - 大于 geq - 大于或等于 及 /i 开关;如果该开关被指定,则说明要进行的字符串比较不分 大小写。/i开关可以用于 IF 的 string1==string2 的形式上。这些 比较都是通用的;原因是,如果 string1 和 string2 都是由数字 组成的,字符串会被转换成数字,进行数字比较。 CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它 是在跟与命令扩展名有关联的内部版本号比较。第一个版本 是 1。每次对命令扩展名有相当大的增强时,版本号会增加一个。 命令扩展名被停用时,CMDEXTVERSION 条件不是真的。 如果已定义环境变量,DEFINED 条件的作用跟 EXISTS 的一样, 除了它取得一个环境变量,返回的结果是 true。 如果没有名为 ERRORLEVEL 的环境变量,%ERRORLEVEL% 会扩充为 ERROLEVEL 当前数值的字符串表达式;否则,您会得到 其数值。运行程序后,以下语句说明 ERRORLEVEL 的用法: goto answer%ERRORLEVEL% :answer0 echo Program had return code 0 :answer1 echo Program had return code 1 您也可以使用以上的数字比较: IF %ERRORLEVEL% LEQ 1 goto okay 如果没有名为 CMDCMDLINE 的环境变量,%CMDCMDLINE% 将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始 命令行;否则,您会得到其数值。 如果没有名为 CMDEXTVERSION 的环境变量, %CMDEXTVERSION% 会扩充为 CMDEXTVERSION 当前数值的 字串符表达式;否则,您会得到其数值。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。