2011-08-30 33 views
1

这里是我的代码片段:为什么这个if执行时​​我还没有给出任何输入?

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

我得到的输出Its right而我没有给任何输入有它只是一个分配到a=8

**Borland Compiler**给出以下2个警告并执行代码。

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

2: 'A' 被分配是从未使用过的值。

+0

你到底在问什么?大多数答案似乎假设你想知道你的错误在哪里,但是使用“它的正确”似乎表明你的代码工作正常。我认为这个问题是为什么编译器会针对(正式)正确的代码发出警告,并按照您的意愿进行操作。当你提出问题时,请考虑包括一个真正的问题,而不是仅仅发布一段代码,并让我们其他人猜测。 –

回答

8

当你写:

if(a=8) 

分配 8的变量,并返回一个,所以你写有效:

a = 8; 
if(a) 

这是不可零,因此被视为“真”。

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

if(a==8) 

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

+0

再次,如果可能是真的。你不能确定一个单位变量的值:) –

+0

@George:非常真实。编辑包括。 –

+0

我明白'='和'=='之间的区别。如果我使用'=='而不是'=',那么'else部分将会执行。所以我想知道为什么赋值是真的并执行? – avirk

1

您需要==(double等于)。单一=是一项任务;当按照您在此处所做的表达式处理时,它会评估为赋值的值,在这种情况下,值为8.将0视为False,其他值为True,所以(a = 8)== 8 == True。

2

a = 8指定8a并返回赋值的值,即88与0不同,因此被认为是true。测试apsses和程序输出"Its right"

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

2
if(a=8) 

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

2

第一个警告是因为在条件测试中写入=的频繁错字,你的意思是==。这个警告背后的哲学是,在程序员重写if(a=b)时,他希望在少数情况下重写if((a=b)!=0),而不是花费大量时间调试结果,如果他错误地得到任务而不是比较结果,那么负担会更轻。

第二个警告正是它所说的:看起来像是一个错误,有一个局部变量,您分配一个值,但从来没有使用。

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

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语句是这样的:

if (8 == a) { 

现在,如果我错过出了=之一,编译器不给我一个警告,它给了我一个错误:)

相关问题