嘿那里我有这个代码将三个单独的整数转换为单个字符串
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
答案 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);