Проблема в спецификаторе формата. pow
возвращает double
, тогда как %d
указывает int
.
Учитывая количество архитектур и то, насколько четко на большинстве платформ проводится разграничение между «интегралом» и «плавающей точкой», в общем случае вы не можете рассматривать результат функции, возвращающей double
, как int
в строке формата и ожидайте правильного вывода.
Причина, по которой это работает, когда вы присваиваете результат pow
для c
(который я предполагаю, является int
, поскольку он работает с %d
), потому что в этом случае ваш компилятор знает, что неявно приведёт результат , но не когда единственное указание типа переменной находится в строке формата.
Решение: либо измените %d
на %f
, либо явным образом приведите результат от pow
к int
.