atoi和前导0表示十进制数

时间:2011-01-14 19:11:20

标签: c decimal atoi

在C中使用atoi时,我尝试将char数字数组转换为int。我在我的号码上有0,但是当我稍后打印这些号码时它们不会被保留。

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

number = atoi(num);

printf("%d", number);

此输出将为905607,我希望它为00905607

有什么想法吗?

10 个答案:

答案 0 :(得分:5)

你可以在你的printf()上做填充,所以如果你想让每个输出都是8个字符,那你就可以使用

printf("%08d", number);

答案 1 :(得分:5)

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

答案 2 :(得分:3)

如果代码正常工作,那么代码工作正常。整数是905607 ...在数学意义上不存在前导零。

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

答案 3 :(得分:3)

不要使用atoi。使用strtol,基数为10.

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

答案 4 :(得分:1)

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

printf( "%08d", num);

答案 5 :(得分:1)

大多数答案都假设您需要8位数,而这并不是您所要求的。

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

也许sscanf的格式为%d?

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

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

number = atoi(num);
printf("%0*d", (int)strlen(num), number);