在C中保持前导零[重复]
Posted
技术标签:
【中文标题】在C中保持前导零[重复]【英文标题】:keeping leading zeros in C [duplicate] 【发布时间】:2013-06-20 05:19:30 【问题描述】:我试图在 c 中打印一个整数,但是那些以零开头的整数导致了我的问题。 例如,如果没有。是 01234 它打印的是 1234 而不是 01234。请告诉如何在 C 中进行操作
我的问题是有 2 个整数,我想知道第一个整数是否在第二个的开头。
对于前- 123和 12345 “是”,因为 123(第一个整数)在第二个整数(12345)的开头
但万一 123和 012345 它应该打印“否”,因为 123 不是在 0123345 的开头,而是在 c 中的尾随零被删除,我的程序正在打印“是”
请告诉我该怎么做(注意,数字的位数可以在整数范围内变化,第二个整数等于或大于第一个整数)
【问题讨论】:
您的标题具有误导性。它应该像“比较前面的零的数字”。 如果您将数字作为字符串处理,您会做得更好。 【参考方案1】:int i = 1234;
printf("%08d", i); // zero-pad to 8 places.
printf
documentation
Working example
【讨论】:
我只想保留用户没有输入的 0,最多 8 个地方 你不能。将数字读入整数后,前导零(没有意义)就消失了。整数只存储数字。如果还有其他问题,那么您应该显示您正在使用的代码。 响应速度+1 :) 我想 52 秒还不错:-) @himanshu 听起来你应该把你的号码读成一个字符串。【参考方案2】:我的建议是,如果您从用户那里获取来自 STDIN 的值。 然后,如果您想将该值用于打印目的,那么您需要将该带有前导零的整数存储到字符串而不是整数中。因为如果您将该字符串值存储在整数中,则前导零没有任何意义。
所以 printf 中的 %s 保留了用户以这种方式输入的零的数量。
【讨论】:
【参考方案3】:#include <stdio.h>
#include <string.h>
#define N_DIGITS 64
main()
char a[N_DIGITS], b[N_DIGITS];
scanf("%s%s", a, b);
if(strncmp(a, b, strlen(a))==0)
puts("yes");
else
puts("no");
return 0;
请注意,数字长度受值N_DIGITS
的限制。
结果如下;
$ ./a.out <<<"123 12345"
yes
$ ./a.out <<<"123 012345"
no
【讨论】:
以上是关于在C中保持前导零[重复]的主要内容,如果未能解决你的问题,请参考以下文章