为什么我总是得到 1 作为答案,而不管分配给变量 a 的值如何

问题描述

为什么我的输出是 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))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...