首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的浮点数不是用C语言打印的,而是整型的?

为什么我的浮点数不是用C语言打印的,而是整型的?
EN

Stack Overflow用户
提问于 2020-07-18 07:03:48
回答 2查看 466关注 0票数 0

我的浮点数不能打印到C中的控制台,我不知道为什么。ints打印得很好,所以我搞不懂为什么浮点数是这样的。代码如下:

代码语言:javascript
运行
复制
float temp = 9.5;
u8_t buf[strlen("temp (K): %.2f\n") + strlen(temp)];
sprintf(buf, "temp (K): %.2f\n", temp);
cli_output(buf);

cli_output

代码语言:javascript
运行
复制
void cli_output(u8_t buf[])
{
    for (int i = 0; i < strlen(buf); i++)
    {
        uart_poll_out(comm_uart, buf[i]);
    }
}

我的输出:Fuel gauge temp (K):编辑:如果我有下面的代码,它会像预期的那样打印到控制台。

代码语言:javascript
运行
复制
int temp = 9;
u8_t buf[strlen("temp (K): %d\n") + strlen(temp)];
sprintf(buf, "temp (K): %d\n", temp);
cli_output(buf);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-21 03:29:03

抛开数组长度问题不谈,可能导致这种情况的原因是开发环境没有启用浮动printf支持。Eclipse在某些环境中为此提供了一个UI设置--我在Simplicity中见过它。或者,您可以手动添加链接器选项-u _printf_float

票数 1
EN

Stack Overflow用户

发布于 2020-07-18 07:11:38

strlen()用于测量字符串的长度,而不是整数或浮点数。

snprintf()函数返回要写入的字符串的长度,因此可以使用该长度进行分配。

另外,不要忘了为空字符的终止进行分配。

代码语言:javascript
运行
复制
float temp = 9.5;
const char* message = "temp (K): %.2f\n";
int length = snprintf(NULL, 0, message, temp);
u8_t buf[length + 1];
sprintf(buf, message, temp);
cli_output(buf);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62962821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档