Как использовать функцию pow () в самом операторе printf ()? - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь использовать функцию pow () в моем коде для печати 3, возведенного в степень 2.

Я использовал функцию pow в самом выражении printf () следующим образом.

printf("%d",pow(3,2));

Выход:

0

Однако, когда я попытался сначала присвоить ее переменной, а затем распечатать, она функционировала отлично.

int c;
c=pow(3,2);
printf("%d",c);

Выход:

9

Я также пытался использовать фиктивную функцию, возвращающую целое число непосредственно в операторе printf (), и это тоже работало нормально.

Если так, в чем проблема в первом утверждении?

1 Ответ

3 голосов
/ 07 июня 2019

Проблема в спецификаторе формата. pow возвращает double, тогда как %d указывает int.

Учитывая количество архитектур и то, насколько четко на большинстве платформ проводится разграничение между «интегралом» и «плавающей точкой», в общем случае вы не можете рассматривать результат функции, возвращающей double, как int в строке формата и ожидайте правильного вывода.

Причина, по которой это работает, когда вы присваиваете результат pow для c (который я предполагаю, является int, поскольку он работает с %d), потому что в этом случае ваш компилятор знает, что неявно приведёт результат , но не когда единственное указание типа переменной находится в строке формата.

Решение: либо измените %d на %f, либо явным образом приведите результат от pow к int.

...