作者在 2012-02-24 14:59:04 发布以下内容
看郝斌老师的视频,经常会提示if(1==i)要比if(i==1)规范。虽然照做却并不知其所以然。今天偶然看到坛友在一篇回复中谈及此问题,恍然大悟
/*时间:2011年9月20日11:02:56*/
# include <stdio.h>
void main()
{
int i;
if (i=0) //当if后面括号里的是类似赋值语句的表达式时,if判断的是赋值后,等号左边的变量是否为真
printf("i=0\n"); //这里 赋值为0,等号左边的i变量为假,所以,printf语句不会执行
if (i=1)
printf("i=1\n"); //当被赋值为1时,i变量为真,这里会输出i=1
if (i=2)
printf("i=2\n"); //当然,被赋值为其余非0的数时,i变量也为真,这里会输出i=2
if (i=2) //这里还有个问题,i是不是真的被赋值了呢?
printf("i=%d\n",i); //这里也输出了i=2,说明i确实被赋值了
if (i==2) //其实大多数情况下,我们实际想真正判断的是i是否等于2的情况,所以需要特别注意==与=的区别
printf("i=%d\n",i); //这里因为之前的语句,i确实被赋值为了2,所以本条语句会执行,输出i=2
if (2==i) //终于到这种写法了,郝斌老师视频里经常提示的规范写法
printf("i=%d\n",i);
// if (2=i) //为什么要写成上面那样呢,就是因为这样写如果不小心漏掉一个=,编译时会报错error C2106: '=' : left operand must be l-value
printf("i=%d\n",i);
}
# include <stdio.h>
void main()
{
int i;
if (i=0) //当if后面括号里的是类似赋值语句的表达式时,if判断的是赋值后,等号左边的变量是否为真
printf("i=0\n"); //这里 赋值为0,等号左边的i变量为假,所以,printf语句不会执行
if (i=1)
printf("i=1\n"); //当被赋值为1时,i变量为真,这里会输出i=1
if (i=2)
printf("i=2\n"); //当然,被赋值为其余非0的数时,i变量也为真,这里会输出i=2
if (i=2) //这里还有个问题,i是不是真的被赋值了呢?
printf("i=%d\n",i); //这里也输出了i=2,说明i确实被赋值了
if (i==2) //其实大多数情况下,我们实际想真正判断的是i是否等于2的情况,所以需要特别注意==与=的区别
printf("i=%d\n",i); //这里因为之前的语句,i确实被赋值为了2,所以本条语句会执行,输出i=2
if (2==i) //终于到这种写法了,郝斌老师视频里经常提示的规范写法
printf("i=%d\n",i);
// if (2=i) //为什么要写成上面那样呢,就是因为这样写如果不小心漏掉一个=,编译时会报错error C2106: '=' : left operand must be l-value
printf("i=%d\n",i);
}