重庆适合一日游的地方:关于C语言问题

来源:百度文库 编辑:神马品牌网 时间:2024/05/03 13:38:18
main()
?? { int a=1,b=2,c=3;
?? if(c=a) printf("%d\n",c);
?? else printf("%d\n",b);
?? }
为什么不是2
那else还有什么意义啊

问题关键点:if(c=a)

这个语句,对于编译器来说,是合法的。c=a,很明显是一个赋值语句。执行以后,c为1,整个表达式,返回1,因此if表达式为真,通过。

但对于程序员来说,这种风格可以说是致命的。这是一个错误。很重要的一个守则是:不要在条件表达式中使用赋值语句!
上面的语句应该改成:if(c == a) ...
如果非要用赋值语句,则应该改成:if((c=a) == 1)...
最好应该分成两句来写: c=a; if(c == 1)...

一个好的编译器会对 if(c=a) 这样的表达式发现警告。一个好的程序员应该让条件语句中不出现 “=” 号。

if(c=a) printf("%d\n",c);
c=a是赋值语句
条件应该是c==a

答案只能是1
条件是(c==a) 的话就是2

if(c=a)就是先把a的值赋给c
c = 1了
然后就是判断if(c)
c不等于0,所以成立
打出了c的值

所以应该是if(c==a)才是比较c和a

if(c=a) 你使用了赋值表达式,即把 a的赋值给c,然后判断c的值是否为0 ,由于a 为1 , 所以c 也为1 . 由于判断出来不是0 ,所以认为是真,即执行printf("%d\n",c);
如果想比较请用c==a