Как правильно интерпретировать этот код шаг за шагом? (Новичок в программировании) - PullRequest
0 голосов
/ 30 октября 2019

Моя проблема в том, что я не знаю, как компилятор корректно просматривает различные операторы 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 ]

1 голос
/ 30 октября 2019

Во-первых, если вы новичок. Не пропускайте брекеты. Теперь давайте пройдем это шаг за шагом в вашем первом if-else. Здесь ваш а = 8, б = 4, с = 1. Вот как работает ваш код

if (a < b< c)  // equivalent to if(0<c) due to left associativity// firstly a<b will be evaluated which 0 and hence statement  is true as c is 1.
{
if (c > b > a) // equiavelnt to if(bool(c>b)>a) which is false as c>b is 0 hence it will reduce to if(0>c) .execution goes to else block.
{

    if (a > c)
    {
       cout << 84;
    }
    else
    {
       cout << 48;
    }
}
else
{
    if (b < c) // it is false. execution goes to else 
    {
        cout << 14;
    }
    else
    {
        cout << 41; // it is printed.
    }
}

}

0 голосов
/ 30 октября 2019

Это утверждение бессмысленно:

if (a < b < c)

Он будет оцениваться как:

if (a < bool(b < c))

Операторы lt / gt / eq / ne / le / ge являются двоичными - т.е. они требуют двух аргументов. Вы должны делать что-то вроде:

if (a < b && b < c)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...