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

Why am I always getting 1 as answer irrespective of the value assigned to the variable a

提问人:Gayatri Agnani 提问时间:5/28/2021 最后编辑:Vlad from MoscowGayatri Agnani 更新时间:5/28/2021 访问量:72

问:

为什么我得到 1 而不是 7(如果 a 最初被分配为 12,那么 a-5 应该给出 7)或 3 作为(如果 a 被分配为 8,那么 a-5 应该给出 3)。无论分配给 a 的值如何,输出始终保持 1。

int main()
{
    int a = 12;
    if (a = 8  && (a = a - 5))
        cout << a;
    else
    {
        //do nothing !!
    }
}
c++ if 语句 运算

评论

0赞 Jarod42 5/28/2021
=是赋值,您要检查是否相等==
0赞 Alessandro Teruzzi 5/28/2021
你是说a==8吗?
0赞 Richard Critten 5/28/2021
&&具有比赋值更高的优先级,请参阅 en.cppreference.com/w/cpp/language/operator_precedence

答:

1赞 Vlad from Moscow 5/28/2021 #1

目前尚不清楚您要执行的操作,但 if 语句中的条件

if (a = 8  && (a = a - 5))

相当于

if ( a = ( 8  && (a = a - 5 ) ) )

因此,逻辑 AND 运算符为 true,因为左操作数不等于 且表示赋值表达式的右操作数也不等于 0。因此,赋值 ( ) 中的布尔值被赋值为 。80a = a - 5atruea = true1

要获得预期结果 3,您必须编写如下条件

if ( ( a = 8 ) && (a = a - 5))
0赞 N0ll_Boy 5/28/2021 #2

在这个例子中,因为首先计算哪个总是真且等于 1,然后它将分配给 这就是它变为 1 的原因。8 && (a = a - 5)

如果您看到这里,它将显示 first 将评估,然后即使您更改数字,结果也会变为 1。&&=

应按以下顺序写:

if ((a = 8)  && (a = a - 5))