0

在 CI 中使用atoi时,我试图将char数字数组转换为int. 不过,我的号码上有前导0,当我稍后打印号码时,它们不会被保留。

char num[] = "00905607";
int number;

number = atoi(num);

printf("%d", number);

这个输出将是905607,我希望它是00905607

有任何想法吗?

4

10 回答 10

6

您可以在 printf() 上进行填充,因此如果您希望每个输出的长度为 8 个字符,您可以使用

printf("%08d", number);
于 2011-01-14T19:16:11.297 回答
5

请改用strtol。它允许您指定基数。

于 2011-01-14T19:16:17.293 回答
4

该代码可以正常工作,如果它可以工作的话。整数是 905607... 在数学意义上不存在前导零。

您对该代码有很多问题。您不正确地声明了您的字符串,并且您没有打印转换后的数字。此外,如果您这样做,则printf(number);需要使用格式字符串。如果您想在其中使用前导空格,则可以使用宽度说明符。

于 2011-01-14T19:17:21.960 回答
3

不要使用atoi。使用以 10 为底的 strtol。

一般来说,没有理由在现代代码中使用 atoi。

于 2011-01-14T19:17:50.400 回答
2

大多数答案都假设您需要 8 位数字,而这并不完全符合您的要求。

如果要保留前导零的数量,最好将其保留为字符串,并将其转换strtol为用于计算。

于 2011-01-14T19:21:26.973 回答
1

是的,当您想显示整数时,您必须再次将它们格式化为字符串。整数只是一个数字,它不包含有关如何显示它的任何信息。幸运的是,printf 函数已经包含了这个,所以就像

printf( "%08d", num);
于 2011-01-14T19:17:46.780 回答
0

您还可以计算字符串中数字的数量并创建一个带有前导零的新数字。

或者查看 printf 的所有精彩格式标签,并使用 1 填充零。例如,这里有很多: http ://www.cplusplus.com/reference/clibrary/cstdio/printf/

于 2011-01-14T19:23:05.163 回答
0

您可以使用 sscanf,并提供 '%d' 作为格式字符串。

于 2011-01-14T19:15:15.830 回答
0

如果您不想要这种行为;不要使用atoi。

也许 sscanf 格式为 %d ?

于 2011-01-14T19:16:23.333 回答
0
char num[] = "00905607";
int number;

number = atoi(num);
printf("%0*d", (int)strlen(num), number);
于 2021-04-12T09:10:07.223 回答