Второй (внутренний) printf выполняет печать столько символов, сколько a
, а затем столько же символов, сколько b
.printf
возвращает количество напечатанных символов, таким образом, сумма a
и b
.
Теперь давайте немного глубже printf("%*s", a, "\r")
напечатает строку с шириной, указанной с помощью параметра (в этомcase a
) - это то, что делает звездочка.По умолчанию строка остается дополненной пробелами.Таким образом, вы получите a - 1
пробелов и символ возврата каретки.Сделав это дважды: printf("%*s%*s",a,"\r",b,"\r")
сначала напечатает строку с шириной, установленной на значение a
, а затем вторую строку с шириной, установленной на значение b
.
После этого внешний printf
напечатает число, соответствующее количеству символов, напечатанных внутренним printf
, но мы уже знаем, что это будет, не так ли?
ПРИМЕЧАНИЕ: поскольку левое отступление может только добавить, никогда не будетудалить символы, код на самом деле неверен для a = 0
или b = 0
(или, конечно, негативов)