c+中的sprintf()+;使用条件语句 我试图用C++中的SARTIFF()为char数组格式化一个ARDUNO项目 我的目标是将以下整数格式化:日、月、年、小时、分钟和秒

c+中的sprintf()+;使用条件语句 我试图用C++中的SARTIFF()为char数组格式化一个ARDUNO项目 我的目标是将以下整数格式化:日、月、年、小时、分钟和秒,c++,c,arduino,C++,C,Arduino,年月日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)?'

年月日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);

sprintf(timeStr,“%c%u/%c%u/%u%c%u:%c%u:%c%u”,(monthDay>0&&monthDay0&&month0&&hour0&&minute0&&second您正确地认为
%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”,
(月日<10)?“0”:“,
月日,
:
等等

但是我很确定Arduino没有那么缺陷。

你是对的,
%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”,
(月日<10)?“0”:“,
月日,
:
等等

但是我很确定Arduino没有那么差。

%c格式总是只需要一个字符,因此不允许使用
'
。您希望打印零个或一个字符的内容。您可以使用%s来实现这一点,并使条件表达式使用字符串文字而不是字符文字:
(monthDay>0&&monthDay%c格式始终只需要一个字符,因此不允许使用
'
。您希望打印零字符或一个字符的内容。您可以使用%s进行打印,并使条件表达式使用字符串文字而不是字符文字:
(monthDay>0&&monthDay查找printf格式,并使用类似“%02d”的内容来指定宽度为2,并用0填充。如果sprintf无法工作,为什么不使用strcat,因为您不想在值小于10时输出。查找printf格式并使用类似“%02d”的内容如果sprintf不能工作,为什么不使用strcat,因为当值小于10时,您不想输出。啊!谢谢,我的印象是它们只存在于基本类型中,如%d、%c、%lf等,从我研究的列表中,我没有意识到它会从中扩展。我的标题是错误的di再次感谢您的澄清!啊!谢谢,我的印象是它们只存在于基础类型%d、%c、%lf等中,从我研究的列表中,我没有意识到它会从此扩展。我走错了方向,再次感谢您的澄清!编辑:我误读了它使用的是%s而不是%c,并且理解了您的解决方案现在,我在发表文章之前尝试过这个解决方案,但是你得到了一个编译器错误,它需要一个char而不是char数组,我试着聪明地这样做:
char*c=“”;(monthDay>0&&monthDay Edit:我误读了它使用的是%s而不是%c,并且理解了您的解决方案。现在我在帖子之前尝试了此解决方案,但是您收到了一个编译器错误,它希望使用char而不是char数组,我试着聪明地执行此操作:
char*c=“”;(monthDay>0&&monthDay)