2016-10-20 233 views
-2

我的C++代码如下:为什么为i等于-1

#include <iostream> 
using namespace std; 

int main() { 

    int i = 0; 

    cout << (i=0) << endl; 

    if(i=0) { 
     i=1; 
    } 

    cout << i; 

    return 0; 
} 

为什么(i=0)等于0?

+5

它等于零,因为你需要[读一本书](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。问题是分配与平等的比较。 –

+1

公平,这是一个新手的错误。在我们学习的时候,我们都犯了这样的错误... – vz0

+1

@Someprogrammerdude在这个网站上没有必要粗鲁。你会考虑重新编写第一句话吗? – DBPriGuy

回答

7

您已将赋值运算符'='与等号运算符'=='混淆。

因此,您if声明if(i=0)检查我是否等于0,这是分配 0到我。而且由于该分配成功,因此if成功,因此我随后被分配到了该陈述中的值。

编辑:

根据要求:为什么 “COUT < <(I = 0);”熄灭“0”?

cout<<(i=0)<<endl;打印零,因为再一次,i=0是一个赋值语句,而不是比较语句。它不会比较我0和打印结果,它是分配我0然后打印我。由于我是0,字符'0'被打印。

+0

是的,我知道了。但为什么“cout <<(i = 0);”熄灭“0”? – DachuanZhao

+0

不清楚这是你的问题,但我会添加一个附录。你可能想编辑你的问题,以明确你正在寻找什么。 – DBPriGuy

+0

对不起。这是我的错。但谢谢你的回答! – DachuanZhao

-2

如果您将代码放在更多行并使用调试器,则可以回答自己的问题。

应该很明显,if(0)的主体永远不会运行。

+0

是的,我知道了。但为什么“cout <<(i = 0);”输出“0”? – DachuanZhao

+0

这不是一个答案。即使它是,它相当居高临下。不知道为什么人们这样做。 -1 – erip

0

如果你把你条件if(condition)声明:

如果条件返回值= 0,则语句执行

如果条件返回值== 0 then语句不执行!

赋值运算符返回参考重视

所以: 如果你把赋值运算符,如果,那么分配的结果将被选中且i = 0 0的回报,因此语句将不会被执行。

相关问题