我正在尝试使用sprintf()为C ++中的arduino项目格式化char数组 我的目标是格式化以下整数:日,月,年,小时,分钟和秒,进入以下
DD / MM / YYYY HH:MM:SS
当整数是< 10我放弃了我尝试使用以下sprintf
更正的格式 sprintf (timeStr, "%c%u/%c%u/%u %c%u:%c%u:%c%u",(monthDay>0 && monthDay<=9)?'0':'',monthDay,(month>0 && month<=9)?'0':'',month,year,(hour>0 && hour<=9)?'0':'',hour,(minute>0 && minute<=9)?'0':'',minute,(second>0 && second<=9)?'0':'',second);
现在这不会编译,因为我得到“空字符常量”,我认为它来自“没有合法价值。”
如果语句中的%c是有条件的,我只能使用sprintf来格式化字符串,如果它的&lt; 10
我只想要一个值如果有人对如何实现这一目标有任何见解,我会非常感激,因为我真的被它坚持了!
谢谢!
答案 0 :(得分:7)
你是正确的%c
需要一个字符(空的''
不是,顺便说一句)。
但是,如果您使用零填充,只需使用格式说明符"%02d"
?这就是你通常获得零填充数字的方式。换句话说,使用:
sprintf (timeStr, "%02d/%02d/%04d %02d:%02d:%02d",
monthDay, month, year, hour, minute, second);
许多嵌入式系统可能会排除浮点说明符(或者可能使它们成为可选项)以保留空间,但零填充或空格填充整数是一个相当简单的操作,它们都应该具有。
如果您发现某个实现非常缺乏且不支持它们,则可以使用字符串而不是字符,因为空字符串 有效:
sprintf (timeStr, "%s%d/%s%d/%d %s%d:%s%d:%s%d",
(monthDay < 10) ? "0" : "",
monthDay,
:
and so on ...
但我很确定Arduino不是 缺乏。
答案 1 :(得分:1)
%c格式始终只需要一个字符,因此不允许使用''
。您想要打印零或一个字符的内容。您可以使用%s,并使条件表达式使用字符串文字而不是字符文字:(monthDay > 0 && monthDay <= 9) ? "0" : ""
。