Если вы посмотрите на ссылку man printf в Google, вы увидите, что эта функция возвращает количество записанных байтов.
Здесь ваше условие равно !printf("0")
, в другихслова: "до тех пор, пока возвращение printf не существует (или равно 0), сделайте что-нибудь. Но вы печатаете символ '0', так что printf фактически возвращает 1, так что ваше условие ложно.
Теперь ПОЧЕМУпечатает 10:
- Первый
printf("1")
печатает 1. - Ваше состояние проверено хотя бы один раз, поэтому второе
printf("0")
происходит один раз (печатается 0)