atoi和前导0表示十进制数
在CI中使用atoi
,我试图将char
数组转换为int
。 我的号码虽然领先0
,但是当我稍后打印这些号码时它们不会被保留。
char num[] = "00905607"; int number; number = atoi(num); printf("%d", number);
这个输出将是905607
,我希望它是00905607
。
有任何想法吗?
请改用strtol 。 它允许您指定基础。
你可以在你的printf()上做填充,这样你就可以使用每个输出长度为8个字符
printf("%08d", number);
该代码工作正常,如果它可以工作。 整数是905607 …在数学意义上不存在前导零。
您的代码存在很多问题。 您正在声明您的字符串不正确,并且您没有打印转换后的数字。 另外,如果你正在做printf(number);
你需要使用格式字符串。 如果你想在其中有前导空格,可以使用宽度说明符。
不要使用atoi。 使用strtol,基数为10。
一般来说,没有理由在现代代码中使用atoi。
是的,当您想要显示整数时,您必须再次将它们格式化为字符串。 整数只是一个数字,它不包含有关如何显示它的任何信息。 幸运的是,printf函数已经包含了这个,所以就像这样
printf( "%08d", num);
大多数答案都假设您需要8位数,而这并不是您所要求的。
如果你想保留前导零的数量,你可能最好把它保存为字符串,并用strtol
转换它来进行计算。
您可以使用sscanf,并提供’%d’作为格式字符串。
如果你不想要这种行为; 不要使用atoi。
也许sscanf具有%d格式?
您还可以计算字符串中的数字数量,并创建一个带有前导零的新数字。
或者查看printf的所有精彩格式标签,并使用一个用零填充。 例如,这里有很多: http : //www.cplusplus.com/reference/clibrary/cstdio/printf/