【问题标题】:Why does (a == b == c) inside if statement in C not work? [duplicate]为什么 (a == b == c) 在 C 中的 if 语句中不起作用? [复制]
【发布时间】:2015-08-07 14:41:07
【问题描述】:

我有一个问题:
为什么 (a == b == c) 在 C 中的 if 语句中不起作用?

例如,我有这样的代码:

int naxes1[1] = {6};
int naxes2[1] = {6};
int naxes3[1] = {6};

if (naxes1[0]  == naxes2[0] == naxes3[0])
    printf("first doesnot work\n");

if (naxes1[0]  == naxes2[0] && naxes1[0]== naxes3[0])
    printf("second works\n");

为什么?

我浏览了以下链接:
Usage of greater than, less than operators

【问题讨论】:

  • 只需更改编程语言。 AFAIK 在 JavaScript 中你可以使用操作符 ===.:)
  • @VladfromMoscow:问题不在于===,而在于a == b == c。这在 JavaScript 中也不起作用(除了布尔值,如 C)。
  • @Quentin:这是我的观点,如果你有布尔值(并且你选择了正确的值),你就可以做到,但这不太可能是你真正想要的。
  • @T.J.Crowder 这是“作品”的原始定义,我猜 :p 请注意,如果有来自 bool 的隐式转换,它实际上可以编译为多种类型。

标签: c if-statement


【解决方案1】:

因为它是这样评估的:

if ((naxes1[0] == naxes2[0]) == naxes3[0])
//  ^----------------------^---- Note

...内部表达式的结果不是naxes1[0] 或naxes2[0] 中的值,而是一个布尔值。

【讨论】:

    【解决方案2】:

    操作顺序。第一个== 将产生true 或1。那么当您将1 与naxes[0] 进行比较时,您会得到

    1 == 6
    

    这是错误的,所以你得到 0 并且它不会打印。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 2021-07-31
      • 2022-12-04
      相关资源
      最近更新 更多