我使用printf输出内容。现在,我在另一个人的代码中看到格式规范为"%03.3u“,根据我的理解,在点已经将输出的宽度指定为3位之前,并在没有3的情况下填充零,而点后面的"3”还指定应该有3位数字输出。因此,它似乎"03“之前的点和"3”后的点被复制。
我做以下测试:
char l[50];
sprintf(l, "%03.3u", 5);
sprintf(l, "%03u", 5);
sprintf(l, "%.3u", 5); 并确认输出始终为005。那么为什么其他人应该使用"%03.3u“而不是"%03u”或"%.3u“呢?
发布于 2019-12-18 03:50:58
03是带零填充的字段宽度.这意味着至少要输出3个字符(),如果少于3个字符,则向左显示零。
第二个3是输出的位数的最小数。
当这两种情况都被指定时,将应用精度,如果结果比最小字段宽度窄,则输出将被填充。例如,printf("q%6.3u", 5)将产生q 005。(我使用q,因为堆栈溢出格式会占用空格)。
如果您正在打印一个无符号整数,并且没有使用符号标志,那么数字的数量与字段宽度相同(因为唯一的输出是数字)。%03u、%.3u和%03.3u都有相同的效果。
我猜这个人写了%03.3u,因为他们没有正确理解这些东西的含义,所以他们猜到了一些东西,它起了作用,他们决定不再做任何进一步的改变。
如果您打印一个符号字符,则字段宽度与数字计数不同,例如,您可以尝试使用%+3u和%+.3u。或者如果使用%d并打印一个负数。
https://stackoverflow.com/questions/59385035
复制相似问题