为什么这会在我没有给出任何输入的情况下执行?

时间:2011-08-30 17:01:39

标签: c++

这是我的代码段:

int a;
if(a=8)
    cout<<"Its right";
else
    cout<<"Not at all";
getch();
return(0);

我收到输出Its right,而我没有给出任何输入,只是a=8的分配。

**Borland Compiler**提供以下2个警告并执行代码。

  

1:可能的分配不正确(a = 8)

     

2:'a'被赋予一个从未使用过的值。

6 个答案:

答案 0 :(得分:8)

当你写:

if(a=8)

8分配给变量a,并返回a,所以你有效地写了:

a = 8;
if(a)

这是非零,因此被视为“真实”。

我(和编译器)怀疑你打算写(注意==而不是=):

if(a==8)

这就是你收到警告的原因。 (请注意,在这种情况下,a仍然未初始化,因此行为未定义。您仍会收到警告,并且仍可能返回true ...)

答案 1 :(得分:2)

a = 88分配给a并返回作业的值,即88与0不同,因此被视为true。测试apsses,程序输出"Its right"

您可能已经编写if ( a == 8 )来正确测试a的值而不更改其值。

答案 2 :(得分:2)

if(a=8)

意味着为a赋值8,然后使用它来评估if语句。由于8非零,因此它实质上转换为TRUE(任何非零值都为真)。

答案 3 :(得分:2)

第一个警告是因为在条件测试中写=是一个常见的拼写错误,你的意思是==。这个警告背后的哲学是,程序员在他想要的几个案例中重写if(a=b),比如if((a=b)!=0),而不是花费令人沮丧的时间调试结果,如果他错误地得到了分配而不是比较。

第二个警告正是它所说的:拥有一个你为其分配值但从不使用的局部变量似乎是错误的。

由于它们只是警告,如果您认为自己知道自己在做什么,就可以自由地忽略它们。编译器甚至可以为您提供关闭它们的方法。

答案 4 :(得分:2)

其他人的答案都是正确的:)

if (a = 8) // Sets a to be 8 (and returns true so the if statement passes)
if (a == 8) // Check to see if a is equal to 8

我只想补充一点,我总是(习惯的力量!)以这种方式写出语句:

if (8 == a) {

现在,如果我错过了=中的一个,编译器没有给我一个警告,它会给我一个错误:)

答案 5 :(得分:1)

你需要一个==(双等于)。 Single =是一项任务;当你在这里处理一个表达式时,它会计算为赋值,在这种情况下,8被视为False而其他任何东西都是True,所以(a = 8)== 8 == True。