微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c pow函数打印错误的值,但函数返回正确的结果

我已经做了一个小的函数,将hex颜色值转换为c中的rgb值。

函数正常工作,如果我通过它在“#008080”我得到:

HEX: #008080 RGB: 0,128,128

我遇到的问题是当我试图打印由pow()(为debugging目的)返回的值返回值,这是我得到:

EX::: 0 POWER::: 0.000000 EX::: 1 POWER::: 0.000000 EX::: 0 POWER::: 0.000000 EX::: 1 POWER::: 0.000000 EX::: 0 POWER::: 0.000000 EX::: 1 POWER::: 0.00000

这是输出这个的代码

简单的代码在C崩溃中产生一个进程。 为什么?

Code :: Blocks – mingw32-g ++。exe:error:CreateProcess:No such file or directory

睡眠function错误在C

C ++使用系统获取PID

Windows中的TextBlob安装

int num = 0; char c; double power; for (int i = strlen(hexString),ex = 0; i > 0; i--,ex++) { c = hexString[i - 1]; power = pow(16.0,ex); printf("EX::: %dn",ex); printf("POWER::: %lfn",power); num += convertHexCharToDec(&c) * power; }

如果我用GDB运行这个,我可以看到powervariables的值是1,然后是16。

这里有什么问题? 该函数输出正确的值,我可以在debugging器中看到正确的值,所以为什么我不能看到正确的值

谢谢

编辑:添加电源variablestypes

编辑2:在用printfs说明符搞乱之后,我发现我应该使用%f说明符。

谢谢您的帮助。

WINAPI_FAMILY_PARTITION是做什么的?

在Windows上gtk2hs无法运行

winapi – 未公开的Windows消息0x0313稳定?

Jar文件独立运行时工作,但在Windows服务下无法运行

如何将尾部空格添加文件名称

你应该首先检查你没有显示的power类型。

格式说明符和传递给printf的变量之间的printf是未定义的行为,这就是为什么:

#include <stdio.h> int main (void) { int i = 42; double d = 3.14159; printf("POWER::: %lfn",i); printf("POWER::: %lfn",d); return 0; }

可以给你:

POWER::: 0.000000 POWER::: 3.141590

不受惩罚。

有关这些错误结果可能发生的更详细的原因,请参阅此答案 。 它并不具体涵盖浮点值,但理论是相同的。 如果你告诉printf期待一件事,那么就给它一个完全不同的东西,如果它变得困惑,你几乎不会抱怨:-)

如果power是一个整数类型,则需要将其更改为非整数类型,或者更改格式说明符。 无论如何,他们应该匹配。

在任何情况下,只要你有一个32位的整数(和所有的24位颜色代码),你完全不需要求助于浮点。 你可以使用如下代码

for (int i = strlen(hexString),mult = 1; i > 0; i--,mult *= 16) { c = hexString[i - 1]; printf("MULT::: %dn",mult); num += convertHexCharToDec(&c) * mult; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐