pow (1,0) возвращает 0?

Почему это:

printf("%d\n", pow(1,0)); /* outputs 0 */ 

возвращает 0 ? Я ожидал, что он вернется 1 .

pow() возвращает double тип. Вам нужно использовать спецификатор формата %f для печати double .

Использование несоответствующего спецификатора формата для заданного типа аргумента вызывает неопределенное поведение . Проверьте главу §7.21.6.1 стандарта C N1570 ( C11 ). (Да, это не имеет ничего общего с C89 , IMHO)

Вам нужно набрать результат для int, поскольку pow () возвращает double.

 printf("%d\n",(int) pow(1,0)); 

Это даст вам желаемый результат 1

note: pow(a,b) дает правильный результат, когда и a, и b являются integers как в вашем случае. Но вам нужно add 0.5 к результату при работе с fractions чтобы результат округлялся до ближайшего целого .

 printf("%d\n",(int) (pow(2.1,0.9)))// will return 1. printf("%d\n",(int) (pow(2.1,0.9)+0.5));//will return 2. 

Надеюсь, это поможет вам.