【发布时间】:2013-06-19 18:50:23
【问题描述】:
我正在尝试在我的 sprintf 语句中完成一些格式设置,但它似乎没有像我预期的那样工作。这是一行:
n = sprintf(buffer, "x = %d.%d, y = %d.%d, z = %d.%d \n", x1, x2, y1, y2, z1, z2);
在打印输出中,x1 是数字的整数部分,x2 是小数部分。一切都会好的,除了我需要将 x2、y2 和 z2 填充为始终为 2 位数字 - 这意味着我需要用前导零填充。
根据我在网上看到的示例,这样做似乎应该可行:
n = sprintf(buffer, "x = %d.%02d, y = %d.%02d, z = %d.%02d \n", x1, x2, y1, y2, z1, z2);
但是,这会产生类似这样的结果:
x = 2.2d, y = 37.2d, z = 2.2d
上面的 37 实际上是 x2,它显然被转移到了 y1 的位置。我尝试在“02”周围加上括号,但这也无济于事。
我也尝试过像这样分割期间:(但没有奏效)
n = sprintf(buffer, "x = %d. %02d, y = %d. %02d, z = %d. %02d \n", x1, x2, y1, y2, z1, z2);
我不太确定出了什么问题...如果有任何帮助,我将不胜感激。这在 sprintf 中并不是特别重要(理论上我可以写一些“if”语句并让它以这种方式工作),但这会很好。
谢谢!
【问题讨论】:
-
在这里正常工作。您是否可能不小心在转换中输入了
O而不是0? [牵强,我知道] -
@DanielFischer,这些是从我的代码中复制粘贴的,我认为它们是 0。不过我再次检查了:P 我为此设计了一个快速替换功能,但我很想知道为什么这无论如何都不起作用。
-
好的,如果这是复制粘贴,那么您的格式是正确的。它可以从这里复制粘贴,正如目视检查所说的那样。那么,您使用的是什么编译器(和库实现)?看起来好像它没有实现所有标志。出于好奇,它与
%d.%2d有什么关系?它是空格键吗? -
%d.%2d 给了我
x = -3.d, y = 59.d, z = -7.d,再次移动 x2。 (这是我实际测量的加速度,但我大致知道什么值应该在哪里)。我拥有的编译器是来自 Code Composer Studio 5 的 TI v4.1.5。我不知道如何检查库实现:( 看着 here 虽然似乎有一个选项可以打开完整的 printf() 支持,即应该是默认的。我现在不太清楚,但我正在寻找。 -
“注释”确实说,对于 MSP430,在 CCS v4 中创建新项目时,此选项默认设置为“最小”以避免大量 RAM 需求。 “最小”支持避开了与您看到的输出一致的宽度和精度标志。试试
--printf_support=nofloat看看是否有帮助。
标签: c io printf code-composer