【问题标题】:Why am I always getting 1 as answer irrespective of the value assigned to the variable a为什么无论分配给变量 a 的值如何,我总是得到 1 作为答案
【发布时间】:2021-08-16 11:36:05
【问题描述】:

为什么我得到 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-statement operator-precedence assignment-operator logical-and


【解决方案1】:

在此示例中,因为首先评估 8 &amp;&amp; (a = a - 5) 始终为真且等于 1,然后它将分配给 a 这就是它变为 1 的原因。

如果您看到 here,它将显示首先 &amp;&amp; 将评估然后 = 即使您更改数字,结果也会变为 1。

应该按这个顺序写:

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

【讨论】:

    【解决方案2】:

    除了 if 语句中的条件外,不清楚您要做什么

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

    等价于

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

    所以逻辑与运算符的结果为真,因为左操作数8 不等于0,而表示赋值表达式a = a - 5 的右操作数也不等于0。所以a 被赋值为赋值 (a = true) 中的布尔值 true 转换为 1

    要获得预期的结果 3,您必须编写类似的条件

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 2021-07-03
      相关资源
      最近更新 更多