scanf
останавливает обработку ввода, как только происходит сбой любого преобразования, переходя слева направо, он не пытается обработать оставшиеся входные данные.
Поэтому, когда вы вводите
b b 2.8
, происходит сбой при попытке выполнить первое %lf
преобразование.Поскольку никакие преобразования не были выполнены, он возвращает 0
.
. Когда вы вводите
2 x 2.1
, он успешно преобразует 2
в double
, но не работает на x
,поэтому он не обрабатывает 2.1
и возвращает 1
.