繁体   English   中英

为什么pow函数在printf()中使用时会产生任意结果?

[英]Why the pow function when used in printf() produce arbitrary results?

我在C-中有此代码

#include <stdio.h>
#include <math.h>
int main()
{
    printf("%d",(12345/pow(10,3)));
}

它输出任意值,为什么不输出12? 上面的代码不等于-

#include <stdio.h>
#include <math.h>
int main()
{
    int i=12345/pow(10,3);
    printf("%d",i);
}

它输出12,为什么这两个代码输出不同的值?有人可以解释一下。

pow返回一个double ,因此导致不确定的行为,因为您将其传递给需要int的格式字符串,因为typeof(int / double) == double

尝试

printf("%lf\n", 12345 / pow(10, 3));

或使用明确的演员表,例如

printf("%d\n", 12345 / (int) pow(10, 3));

的结果pow是类型double ,所以整个表达12345/pow(10,2)具有类型double 不幸的是,您试图使用%d转换说明符打印该double值,该说明符期望为int值。

如果要输出整数,请执行以下操作:

printf( "%d", (int)(12345/pow(10,3)));

否则,将其打印为双精度:

printf( "%f", 12345/pow(10,3));

12345/pow(10,3)辅助为int时,结果将转换为int。

当将12345/pow(10,3)传递给printfprintf一个double压入堆栈,但是printf期望根据您的格式规范为int。

printf( "%g", 12345/pow(10,3));

这可以解决您的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM