有关if(a=1)不是判断,是赋值的问题,急急急

whc12345whc 2012-04-24 11:49:57

#include<stdio.h>
void main()
{
int a=0,y=10;
if(a=0)y--;
else
{
if(a>0) y++;
else y+=y;
};
printf("y=%d\n",y);
}

这个我个人觉得第一个if语句中不是执行了a=0了吗,就应该要执行后面的y--,然后第一个else下面的代码都不要管了,
但是输出结果是20,新手求助,详细点最好,拍砖者轻点,谢谢了,
...全文
1238 58 打赏 收藏 转发到动态 举报
写回复
用AI写文章
58 条回复
切换为时间正序
请发表友善的回复…
发表回复
xu1018 2012-04-27
  • 打赏
  • 举报
回复
if(a = 0) ----> if(0) 就是执行else语句了
gongheguoyingpai11 2012-04-27
  • 打赏
  • 举报
回复
加个括号就可以if((a=1))
wszzfzsc 2012-04-27
  • 打赏
  • 举报
回复
if(a=0)——>if(a==0)
super_admi 2012-04-26
  • 打赏
  • 举报
回复
其实,楼主的意思是:
a=0,如果执行成功,应该是执行y--;
如果赋值失败,则执行else后面的。

但问题是,a=0这个表达式返回的是什么?一般要求,不论是系统内置的=,还是重载的=,都应该返回左值。

比如:a=b=0;
这里a的结果是0,而不是true.

这里不是楼主写错了,而是楼主理解错了。
yht8708 2012-04-26
  • 打赏
  • 举报
回复
您说的什么意思?我也没说过跟赋值有关系
[Quote=引用 12 楼 的回复:]
引用 6 楼 的回复:
0赋给a,if检查a为0,为false,则执行else后边的

if(a=1)y--;
则结果为9
你这个的说法 如果一开始a初始化1
那a=1的赋值语句 把1赋给a 然后if检查a为1 为false 则执行slse?

赋值跟赋值前a的值无关
[/Quote]
yang_xuan 2012-04-26
  • 打赏
  • 举报
回复
if(a=0)y--;这句话是错误的,正确的答案是 if(a==0) y--;
"a==0"才是对a进行赋值运算,才可以正确的进行判断,否则,就是不能进行判断,而是进行“else“循环。
QD20113281 2012-04-26
  • 打赏
  • 举报
回复
“=”只是赋值号,“==”才是等于号。
DataChat.Club 2012-04-26
  • 打赏
  • 举报
回复
if(a = 0) y--;


if()的括号里须是一个表达式,这里,a = 0 就是一个赋值表达式

这个赋值表达式的值是0!(赋值表达式的值就是要赋给左操作数的值)

所以,if(a = 0) 就是if(0) ,所以不执行y--。

就像a = (b = 5)一样,先执行括号里的赋值运算,b = 5,

然后,将赋值表达式b = 5的值 5 赋给a,

所以最后 a = 5, b = 5

而不是 a = true, b = 5.
project2502 2012-04-26
  • 打赏
  • 举报
回复
下断点 看汇编
夏天__ 2012-04-26
  • 打赏
  • 举报
回复
那a=1的赋值语句 把1赋给a 然后if检查a为1 为false 则执行slse


赋值跟赋值前a的值无关

赋值后返回0
aszhinian 2012-04-26
  • 打赏
  • 举报
回复
貌似C里没bool类型,C++才引入的吧,汗一个!

if(a=0)明显不是if(true),少个“=”
golden628 2012-04-25
  • 打赏
  • 举报
回复
建议编程的时候把常量放左边,例如 if(0==a)即便是少写一个=号,编译的时候就能看到,如果按照LZ的写法,需要很多时间才能发现错误
shouhuiwang 2012-04-25
  • 打赏
  • 举报
回复
这是赋值语句,不是判断语句
mngzilin 2012-04-25
  • 打赏
  • 举报
回复
上面凡是回复
if(a=0)等效if(0)的是正解,其他的都扯远了
ioaq 2012-04-25
  • 打赏
  • 举报
回复
if(a = 0)
先给a赋值为0,然后判断a吧
ioaq 2012-04-25
  • 打赏
  • 举报
回复
if(a = 0)
先给a赋值为0,然后判断a吧
mhlwjsso001 2012-04-25
  • 打赏
  • 举报
回复
学习了。我也以为赋值语句恒为真
so
会判断赋值后的值,0为假
yht8708 2012-04-25
  • 打赏
  • 举报
回复
其实c语言都没有bool

[Quote=引用 36 楼 的回复:]
引用 1 楼 的回复:
if(a=0)中a=0是赋值吧,不能判断正确,就是假的了,进入else中执行了

楼主估计都没有想到用bool
[/Quote]
5t4rk 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

if(a=0)中a=0是赋值吧,不能判断正确,就是假的了,进入else中执行了
[/Quote]

++ 顶v

结贴吧
yht8708 2012-04-24
  • 打赏
  • 举报
回复
0赋给a,if检查a为0,为false,则执行else后边的

if(a=1)y--;
则结果为9
加载更多回复(38)

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧