条件判断语句比较

流程控制进行条件语句判断的时候,经常用到各种数据类型的变量与零值比较的问题,这里进行一个总结加深对数据类型的认识,不规范的与零比较语句容易让人对参与比较的数据类型产生误解。

§1. 布尔变量与零值比较

C++bool类型,C99标准才有布尔类型_Bool,用整型代替布尔类型,非0表示真,0表示假,如果你的编译器不支持布尔类型,可以自定义类型enum_BOOL{FALSE = 0,TRUE = !FALSE}

不可将布尔变量直接与TRUEFALSE或者10进行比较,假设布尔类型的名字为flag

它与零值比较的标准if语句如下:

If ( flag ) //表示flag为真

If ( !flag )  //表示flag为假

 

§2. 整型变量与零值的比较

整型变量应当应用“==”或者是“!=”直接与零比较。假设整型变量的名字为value

它与零值的比较标准if语句如下:

If ( value == 0)

If ( value != 0)

 

§3.浮点变量与零值比较

无论是float还是double类型的变量,都有精度限制,所以一定要避免将浮点变量用

==”或“!=”与数字比较,应该设法转化成“>=”或“<=”的形式。因为float会有误差。

比如你赋了float a=0a有可能是0.000000001,存在误差,所以使用ifx == 0)来判断,经常不会成立。FLOAT_ACCURACY是允许的误差即精度,浮点变量a与零值比较的标准语句为:

Const  float  FLOAT_ACCURACY = 0.00001;

If ( ( a >=  -FLOAT_ACCURACY) && (a <= FLOAT_ACCURACY) )

 

§4.指针变量与零值比较

指针变量的零值是空(即为NULL),尽管NULL的值与0相同,但两者意义不同。假设指针变量的名字为p,它与零值比较的标准语句如下:

If  (p == NULL)    //pNULL显式比较,强调p是指针变量

If  (p != NULL)

 

If (NULL == p)这种写法是程序员为了防止将if (p == NULL)误写成if (p = NULL)而有意颠倒,所以这样的写法是有一定好处的。