如何在 printf() 语句本身中使用 pow() 函数?
How to use pow() function in the printf() statement itself?
我正在尝试在我的代码中使用 pow() 函数来打印 3 的 2 次方。
我像这样在 printf() 语句本身中使用了 pow 函数。
printf("%d",pow(3,2));
输出:
0
然而,当我尝试先将它分配给一个变量然后打印它时,它运行完美。
int c;
c=pow(3,2);
printf("%d",c);
输出:
9
我也尝试过直接在 printf() 语句中使用返回整数的虚拟函数,而且效果很好。
如果是,第一个语句的问题是什么?
问题出在格式说明符上。 pow
returns 一个 double
,而 %d
指定一个 int
。
考虑到架构的数量以及在大多数平台上 'integral' 和 'floating point' 之间的界限非常清晰,一般来说,您无法处理返回 [=11 的函数的结果=] 作为格式字符串中的 int
并期望正确的输出。
将 pow
的结果分配给 c
(我假设它是 int
,因为它与 %d
一起使用)时它起作用的原因是因为在这种情况下,您的编译器知道隐式转换结果,但当变量类型的唯一指示是格式字符串时则不知道。
解决方案:将 %d
更改为 %f
或将 pow
的结果显式转换为 int
.
我正在尝试在我的代码中使用 pow() 函数来打印 3 的 2 次方。
我像这样在 printf() 语句本身中使用了 pow 函数。
printf("%d",pow(3,2));
输出:
0
然而,当我尝试先将它分配给一个变量然后打印它时,它运行完美。
int c;
c=pow(3,2);
printf("%d",c);
输出:
9
我也尝试过直接在 printf() 语句中使用返回整数的虚拟函数,而且效果很好。
如果是,第一个语句的问题是什么?
问题出在格式说明符上。 pow
returns 一个 double
,而 %d
指定一个 int
。
考虑到架构的数量以及在大多数平台上 'integral' 和 'floating point' 之间的界限非常清晰,一般来说,您无法处理返回 [=11 的函数的结果=] 作为格式字符串中的 int
并期望正确的输出。
将 pow
的结果分配给 c
(我假设它是 int
,因为它与 %d
一起使用)时它起作用的原因是因为在这种情况下,您的编译器知道隐式转换结果,但当变量类型的唯一指示是格式字符串时则不知道。
解决方案:将 %d
更改为 %f
或将 pow
的结果显式转换为 int
.