C语言中if else组合
一 bool变量与“零值”进行比较
bool 变量与“零值”进行比较的 if 语句怎么写? bool bTestFlag = FALSE;//想想为什么一般初始化为 FALSE 比较好?
A), if(bTestFlag == 0); if(bTestFlag == 1);
B), if(bTestFlag == TRUE); if(bTestFlag == FLASE);
C), if(bTestFlag); if(!bTestFlag); 哪一组或是那些组正确呢?我们来分析分析:
A)写法:bTestFlag 是什么?整型变量?如果要不是这个名字遵照了前面的命名规范, 肯怕很容易让人误会成整型变量。
FLASE 的值大家都知道,在编译器里被定义为 0;但 TRUE 的值呢?都是 1 吗?很不幸,不都是 1。Visual C++定义为 1,而它的同胞兄弟 Visual Basic 就把 TRUE 定义 为-1.那很显然,这种写法不好。
B,C写法我个人认为都对,最优的写法是C写法,代码简洁,易于理解。
大家都知道 if 语句是靠其后面的括号里的表达式的值来进行分支跳转的。表达式如果为真,则执行 if 语句后面紧跟的代码;否则不执行。那显然,C组的写法很好,既不会引起误会,也不会由于 TRUE 或 FLASE 的不同定义值而出错。
float 变量与“零值”进行比
float 变量与“零值”进行比较的 if 语句怎么写?
float fTestVal = 0.0;
A), if(fTestVal == 0.0); if(fTestVal != 0.0);
B), if((fTestVal >= -EPSINON) && (fTestVal <= EPSINON)); //EPSINON 为定义好的 精度。 哪一组或是那些组正确呢?我们来分析分析:
float 和 double 类型的数据都是有精度限制的,这样直接拿来与 0.0 比,能正确吗?
明显 不能,看例子: Π的值四舍五入精确到小数点后 10 位为:3.1415926536,你拿它减去 0.00000000001 然后再四舍五入得到的结果是多少?你能说前后两个值一样吗? EPSINON 为定义好的精度,如果一个数落在[0.0-EPSINON,0.0+EPSINON] 这个闭区间 内,我们认为在某个精度内它的值与零值相等;否则不相等。扩展一下,把 0.0 替换为你想 比较的任何一个浮点数,那我们就可以比较任意两个浮点数的大小了,前提是在某个精度内比较。
注意选择一个适当的误差范围取决于你的具体需求和浮点数的精度要求。
float floatValue = 0.0; // 假设这是你的 float 变量
float epsilon = 0.0001; // 定义一个小的误差范围if (fabs(floatValue - 0.0) < epsilon) {// 执行当 floatValue 在误差范围内等于零时的逻辑printf("结果很精确");}else{printf("结果有误差");}
指针变量与“零值”进行比较 指针变量与“零值”进行比较的 if 语句怎么写?
int * p = NULL;//定义指针一定要同时初始化,指针与数组那章会详细讲解。
A), if(p == 0); if(p != 0);
B), if(p); if(!p);
C) , if(NULL == p); if(NULL != p);
哪一组或是那些组正确呢?我们来分析分析:
A)写法:p 是整型变量?容易引起误会,不好。尽管 NULL 的值和 0 一样,但意义不同。
B)写法:p 是 bool 型变量?容易引起误会,不好。
C)写法:这个写法才是正确的,但样子比较古怪。为什么要这么写呢?是怕漏写一个 “=”号:if(p = NULL),这个表达式编译器当然会认为是正确的,但却不是你要表达的意思。 所以,非常推荐这种写法。
else 到底与哪个 if 配对呢?
else 常常与 if 语句配对,但要注意书写规范,看下面例子
void test01()
{printf("hhh");
}
int main()
{int x, y;x = 0;y = 0;if (0 == x)/*{printf("world");}*/if (0 == y){test01();}else {printf("hello");}return 0;
}
上面这段代码很容易造成误解,最终打印结果是hhh,因为先满足0==x第一个if语句条件才有下面的第二个if语句判断和else语句分支。若y==0则调用test01函数打印hhh,否则打印hello。
提倡的的风格 | 不提倡的风格 |
void Function(int x) { //program code } | void Function(int x){ //program code } |
if (condition) { //program code } else { //program code } | if (condition){ //program code }else{ //program code } 或: if (condition) //program code else //program code 或: if (width < height) dosomething(); |
do { //program code } while (condition); | do{ //program code }while (condition); |
while (condition) { //program code } | while (condition){ //program code } |
for (initialization; condition; update) { //program code } | for (initialization;condition; update){ //program code } |