1. введите разные целые числа или разные символы, первый оператор assert прерывает программу. (как и должно быть).
Значение оператора запятой в общем выражении
e1 , e2
: - вычислить подвыражение e1
, затем оценить e2
; значением выражения является значение e2
.
Итак, значением выражения
a==b,a*b==9,c==d
является значение
c==d
При использовании этого выражение в assert()
, если c==d
приводит к false
, независимо от значений a
и b
, assert()
приводит к завершению программы.
2. Но если вы введете в этом коде равные целые числа (кроме 3) и одинаковые символы, первый оператор assert не отменяет программу, а второй оператор assert делает.
Логическая операция И expr1 && expr2
использует режим короткого замыкания. При логическом коротком замыкании второй операнд, expr2
, оценивается, только если результат не полностью определен первым операндом, expr1
. То есть expr2
не оценивается, если expr1
является логическим 0
(false).
В выражении, данном в секундах assert()
a==b && a*b==9 && c==d
у вас есть a*b==9
вместе с a==b
и c==d
. Таким образом, это выражение приводит к true
только тогда, когда заданы входные данные от 3
до a
и b
и одинаковые значения символов вводятся в c
и d
, в противном случае это выражение приводит к false
, а утверждение приводит к завершение программы.