您如何逐步正确地解释此代码? (编程新手)

时间:2019-10-30 02:21:15

标签: c++ if-statement syntax

我的问题是我不知道编译器如何正确地运行不同的if语句,以及为什么在这种情况下他会跳过某些语句。

我尝试检查从头到尾的条件是对还是错,从而找到程序的正确输出。但是为什么程序在这里不输出84:

if (a > c) cout << 84;
else cout << 48

完整程序:

int main()
{
  constexpr int a{8};
  constexpr int b{4};
  constexpr int c{1};

  if (a < b < c)
    if (c > b > a)
      if (a > c) cout << 84;
      else cout << 48;
    else
      if (b < c) cout << 14;
      else cout << 41;
  else
    if (b < a < c)
      if (a < c) cout << 81;
      else cout << 18;
    else
      if (b < c) cout << 17;
      else cout << 71;

  return 0;
}

程序仅输出41。为什么?

2 个答案:

答案 0 :(得分:0)

这句话是胡说八道:

if (a < b < c)

它将被评估为:

if (a < bool(b < c))

lt / gt / eq / ne / le / ge运算符是二进制的-即它们需要两个参数。您应该这样做:

if (a < b && b < c)

答案 1 :(得分:0)

首先,如果您是新手。不要跳过括号。现在让我们逐步进行 在您的第一个if-else中。在这里,您的a = 8,b = 4,c = 1。这就是您的代码进行的方式

 services.AddIdentity<ApplicationUser, ApplicationRole>(
                    config => config.SignIn.RequireConfirmedEmail = false)
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>();

}