Answers:
printf("%05d", zipCode);
该0
显示你所用填充和5
表演的整数倍的长度。例如,如果你使用"%02d"
(用于日期)这只能垫零在那些列,即数字。(06
而不是6
)。示例2,"%03d"
将在one列中为一个数字填充2个零,在tens列中为一个数字填充1个零。即。(将填充为7,将填充为007
17 017
)。
正确的解决方案是将邮政编码作为STRING存储在数据库中。尽管看起来可能像数字,但事实并非如此。这是一个代码,每个部分都有其含义。
数字是您要进行算术运算的事情。邮政编码不是这样。
如果您在* NIX机器上:
man 3 printf
这将显示一个手册页,类似于:
0该值应为零填充。对于d,i,o,u,x,X,a,A,e,E,f,F,g和G转换,转换后的值在左侧填充零而不是空白。如果同时出现0和-标志,则忽略0标志。如果通过数字转换(d,i,o,u,x和X)给出精度,则忽略0标志。对于其他转换,行为是不确定的。
即使问题是针对C的,此页面也可能会有所帮助。
man
命令提供数字参数,则会将其范围缩小到该特定部分。没有它,您将获得shell命令的手册页,printf
而不是C函数。
更加灵活。这是一个示例,该示例打印具有固定宽度和空格填充的右对齐数字行。
//---- Header
std::string getFmt ( int wid, long val )
{
char buf[64];
sprintf ( buf, "% *ld", wid, val );
return buf;
}
#define FMT (getFmt(8,x).c_str())
//---- Put to use
printf ( " COUNT USED FREE\n" );
printf ( "A: %s %s %s\n", FMT(C[0]), FMT(U[0]), FMT(F[0]) );
printf ( "B: %s %s %s\n", FMT(C[1]), FMT(U[1]), FMT(F[1]) );
printf ( "C: %s %s %s\n", FMT(C[2]), FMT(U[2]), FMT(F[2]) );
//-------- Output
COUNT USED FREE
A: 354 148523 3283
B: 54138259 12392759 200391
C: 91239 3281 61423
函数和宏的设计使printfs更具可读性。
#define FMT(x) (getFmt(8,x).c_str())
,请注意x参数!),而不是定义变量(这是您的代码所要做的)。