Повисший запрос (или упражнение по чтению неверного кода)

В книге, которую я читаю (C Как программировать с использованием C++ Global Edition, Deitel&Dietel, 2016), приведен следующий код: Обратите внимание, что именно так книга представляет код в разделе упражнений, без использования фигурных скобок и отступов. Я хотел бы научить вас, что использование правильного отступа делает чтение кода намного проще.

int main(){
int x = 9, y = 11;
if (x < 10) 
if (y > 10)
puts("*****");
else
puts("#####");
puts("$$$$$");
}

Выход

*****
$$$$$

В книге говорится, что компилятор всегда связывает else с предыдущим, если, если не указано иное, путем размещения фигурных скобок, так что по этой логике остальное связано с

if (y > 10) 

что верно, а остальное не должно выполняться, давая вывод

***** 

и не

*****
$$$$$

Итак, мой вопрос, почему линия

$$$$$

в выходной?

2 ответа

Решение

[слишком долго для комментария]

Даже без фигурных скобок совершенно ясно, что происходит, если с отступом и новой строкой правильно (что может быть автоматизировано, кстати):

int main() {
  int x = 9, y = 11;

  if (x < 10) 
    if (y > 10)
      puts("*****");
    else
      puts("#####");

  puts("$$$$$");
}

Вы написали это (эквивалентно вашему)

if (x < 10) { 
   if (y > 10) {  
      puts("*****");
   }else{
      puts("#####");
   }
}
puts("$$$$$");

И это после того, что вы сказали. else совпадает с ближайшим if, Вот y>10, И if а также else всегда учитывайте одно утверждение, когда мы не используем скобки. Вот if-else блок внутри внешнего if служит цели единого заявления. Так же, как для else единый puts("####") служит цели. Последний puts будет выполняться независимо от того, какое значение x а также y быть.

Другие вопросы по тегам