在C中使用atoi
时,我尝试将char
数字数组转换为int
。我在我的号码上有0
,但是当我稍后打印这些号码时它们不会被保留。
char num[] = "00905607";
int number;
number = atoi(num);
printf("%d", number);
此输出将为905607
,我希望它为00905607
。
有什么想法吗?
答案 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);