有什么方法可以让sprintf()在输入时作为输入而不删除0?

时间:2014-05-13 15:44:39

标签: c string integer printf scanf

嘿那里我有这个代码将三个单独的整数转换为单个字符串

scanf("%d, %d:%d:%d, %d, %d", &pID, &tStmpHr, &tStmpMin, &tStmpSec, &cond, &reading);
sprintf(timeS, "%d:%d:%d", tStmpHr, tStmpMin, tStmpSec);

它将采用0到59之间的整数,我遇到的问题是,如果它接受小于10的int,则sprintf将在实际整数之前删除零。 scanf似乎不会引起这个问题,我相信发生这种情况的原因是因为sprintf认为这些数字(例如09代表)是相同的而没有零(09 == 9)所以有什么办法让sprintf把它带进绳子时不要删除这些零?

编辑:只是为了澄清我希望字符串如何与当前出现的字符串相关:

tStmpHr = 11
tStmpMin = 08
tStmpSec = 01

目前正在发布什么

11:8:1

我想要出来

11:08:01

2 个答案:

答案 0 :(得分:3)

sprintf没有"删除"零。你没有提供任何前导零。您传入的值是整数,并且没有内置格式的概念。

sprintf的格式字符串告诉它如何输出值。

在您的情况下,您希望将每个值零填充为两位数,因此对于每个值:

 %02d

哪里

  • 0是一个标志,意思是"零填充"
  • 2是字段宽度
  • d是带有符号十进制表示法的整数的转换说明符

所有这些都在sprintf手册页中进行了解释。下次有关于C函数的问题时,请尝试阅读手册页!

答案 1 :(得分:2)

正如pmg在评论中指出的那样,您可以通过在%之后添加0来格式化sprintf的输出,以指示它应该打印前导零。

以下2表示字段宽度应为2。

sprintf(timeS, "%02d:%02d:%02d", tStmpHr, tStmpMin, tStmpSec);