这是我的代码段:
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'被赋予一个从未使用过的值。
答案 0 :(得分:8)
当你写:
if(a=8)
你将 8分配给变量a,并返回a,所以你有效地写了:
a = 8;
if(a)
这是非零,因此被视为“真实”。
我(和编译器)怀疑你打算写(注意==
而不是=
):
if(a==8)
这就是你收到警告的原因。 (请注意,在这种情况下,a
仍然未初始化,因此行为未定义。您仍会收到警告,并且仍可能返回true ...)
答案 1 :(得分:2)
a = 8
将8
分配给a
并返回作业的值,即8
。 8
与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。