问题描述
为什么我的输出是 1 而不是 7(如果 a 最初分配给 12 ,那么 a-5 应该给 7)或 3 as(如果 a 分配给 8 那么 a-5 应该给 3 )。无论分配给 a 的值如何,输出始终保持为 1。
int main()
{
int a = 12;
if (a = 8 && (a = a - 5))
cout << a;
else
{
//do nothing !!
}
}
解决方法
除了 if 语句中的条件,还不清楚您要做什么
if (a = 8 && (a = a - 5))
相当于
if ( a = ( 8 && (a = a - 5 ) ) )
所以逻辑 AND 运算符产生真,因为左操作数 8
不等于 0
并且表示赋值表达式的右操作数 a = a - 5
也不等于 0。所以a
被赋值为布尔值 true
,该值在赋值 ( a = true
) 中转换为 1
。
要获得预期的结果 3,您必须编写如下条件
if ( ( a = 8 ) && (a = a - 5))
,
在此示例中,因为首先评估始终为真且等于 1 的 8 && (a = a - 5)
,然后它将分配给 a,这就是它变为 1 的原因。
如果您看到 here,它将显示第一个 &&
将评估然后 =
,即使您更改数字,结果也变为 1。
应该按这个顺序写:
if ((a = 8) && (a = a - 5))