在C中打印领先的0?

zxc*_*xcv 320 c printf

我正试图找到一种打印前导0的好方法,例如01001的邮政编码.虽然这个数字会被存储为1001,但这样做的好方法是什么?

我想过要么使用case case语句/如果那么弄清楚这个数字是多少位数,然后把它转换成一个带有额外0的打印的char数组,但我不禁想到有可能有办法用printf格式语法,这是我的意思.

Evi*_*ach 536

printf("%05d", zipCode);
Run Code Online (Sandbox Code Playgroud)

  • 请不要将zipcodes存储为数字.有些国家的邮政编码中有字母. (224认同)
  • 秒钟错过了问题的全部重点 (3认同)
  • 您需要知道最终填充字符串的最大长度。或者,如果您总是想要 5 个前导零,则“00000”+integer.to_s。ETC (3认同)

Jam*_*ran 157

正确的解决方案是将邮政编码作为STRING存储在数据库中.尽管它可能看起来像一个数字,但事实并非如此.这是一个代码,每个部分都有意义.

数字是你算术的东西.邮政编码不是.

  • 雅.你的观察是绝对正确的.这就是我做的.然而,提出问题的人可能正在尝试处理家庭作业,而不是生产代码.答案需要针对提出问题的人量身定制. (28认同)
  • 我想我应该更准确地改写它来说明我正在寻找如何用我不熟悉的语言做前导和尾随字符.我将来会对任意例子更加小心! (13认同)
  • 像英国这样的其他国家/地区也有邮政编码 (2认同)

Ada*_*ire 46

在最小字段宽度之前放置零:

printf("%05d",zipcode);
Run Code Online (Sandbox Code Playgroud)


Jee*_*Bee 16

Zipcode是一个高度本地化的领域,许多国家的邮政编码都有字符,例如英国,加拿大.因此,在此示例中,您应该使用字符串/ varchar字段来存储它,如果您在任何时候发货或从其他国家/地区获取用户/客户/客户/等.

但是在一般情况下,您应该使用建议的答案(printf("%05d", number);).


Pau*_*lin 15

如果你在*NIX机器上:

man 3 printf
Run Code Online (Sandbox Code Playgroud)

这将显示一个手册页,类似于:

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,这个页面可能有帮助.

  • @Elric如果您给`man`命令一个数字参数,它会将其范围缩小到该特定部分。没有它,您将获得shell命令`printf`的手册页,而不是C函数的手册页。 (3认同)

Dan*_*ett 14

sprintf(mystring, "%05d", myInt);
Run Code Online (Sandbox Code Playgroud)

这里,"05"表示"使用带有前导零的5位数字".


chq*_*lie 13

有两种方法可以输出带前导零的数字:

使用0标志和宽度说明符:

int zipcode = 123;
printf("%05d\n", zipcode);  // Outputs 00123
Run Code Online (Sandbox Code Playgroud)

使用精度说明符:

int zipcode = 123;
printf("%.5d\n", zipcode);  // Outputs 00123
Run Code Online (Sandbox Code Playgroud)

它们之间的区别在于负数的处理:

printf("%05d\n", -123);  // Outputs -0123 (pad to 5 characters)
printf("%.5d\n", -123);  // Outputs -00123 (pad to 5 digits)
Run Code Online (Sandbox Code Playgroud)

邮政编码不太可能是负数,所以这应该不重要。

但请注意,邮政编码实际上可能包含字母和破折号,因此应将它们存储为字符串。在字符串中包含前导零很简单,因此它可以以更简单的方式解决您的问题。

请注意,在上面的两个示例中,5宽度或精度值可以指定为int参数:

int width = 5;
printf("%0*d\n", width, 123);  // Outputs 00123
printf("%.*d\n", width, 123);  // Outputs 00123
Run Code Online (Sandbox Code Playgroud)

还有一个需要知道的技巧:精度 导致0该值没有输出0

printf("|%0d|%0d|\n", 0, 1);   // Outputs |0|1|
printf("|%.0d|%.0d|\n", 0, 1); // Outputs ||1|
Run Code Online (Sandbox Code Playgroud)


Tre*_*ent 7

printf允许各种格式化选项.

例如:

printf("leading zeros %05d", 123);
Run Code Online (Sandbox Code Playgroud)