【发布时间】:2018-02-04 06:53:50
【问题描述】:
我想以这种形式显示一个字符串: "in 3 days 00:15:07" or "in 00:15:07" in case days 为 0
所以我写了一些代码如下
#include<stdio.h>
#define LEASE_TIME_USING_DAYS "in %d days %c%d:%c%d:%c%d\n"
#define LEASE_TIME_NOTUSING_DAYS "in %c%d:%c%d:%c%d\n"
int main(){
int seconds, minutes, hours, days;
char *leasetime;
/* Just for test */
seconds = 7;
minutes = 15,
hours = 0;
days = 3;
/*End just for test*/
char prefixseconds, prefixminutes, prefixhours;
if(seconds<10) prefixseconds=48; else prefixseconds=0;
if(minutes<10) prefixminutes=48; else prefixminutes=0;
if(hours<10) prefixhours=48; else prefixhours=0;
if(days>0) asprintf(&leasetime,LEASE_TIME_USING_DAYS, days, prefixhours, hours, prefixminutes, minutes, prefixseconds, seconds);
else asprintf(&leasetime,LEASE_TIME_NOTUSING_DAYS, prefixhours, hours, prefixminutes, minutes, prefixseconds, seconds);
printf("lease time = %s\n", leasetime);
printf(LEASE_TIME_USING_DAYS, days, prefixhours, hours, prefixminutes, minutes, prefixseconds, seconds);
}
我在控制台中得到这个输出:
lease time = in 3 days 00:
in 3 days 00:15:07
我不知道为什么创建的带有 asprintf 的字符串(第一个显示消息)会以这种方式显示。我希望它像第二条显示消息的结果。
有人知道我哪里出错了吗?
【问题讨论】:
-
prefixhours 为 0,您不能将其打印为 %c。在内部,字符串被终止。
-
@RustyX 那么你有什么建议作为解决方案?
-
@RustyX 不,我认为您不太了解我想要的 prefixseconds=0 我的意思是没有字符,因为在这种情况下 seconds>=10 所以没有必要在前面添加 0秒数
-
您显示的代码是重复的。这违反了DRY principal。