Повисший запрос (или упражнение по чтению неверного кода)
В книге, которую я читаю (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
быть.