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