【问题标题】:atoi and leading 0's for decimal numbersatoi 和前导 0 用于十进制数
【发布时间】:2011-01-14 19:11:20
【问题描述】:

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

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

number = atoi(num);

printf("%d", number);

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

有什么想法吗?

【问题讨论】:

  • 首先,不,它没有; atoi 无论前导零如何都转换为十进制。其次,您打印的是原始字符数组,而不是转换后的数字。
  • 你的编译器不会转换任何东西,尤其是不会转换成八进制..
  • 你应该使用char num[] = ...而不是零长度数组。

标签: c decimal atoi


【解决方案1】:

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

printf("%08d", number);

【讨论】:

  • 似乎不是正确的答案,因为它将数字的大小固定为 8。因此,此代码将为您提供前导零来满足此请求。如果您的代码发送 001 号码.. 它将变为 00000001。所以 @stephen-canon 以 10 为底的 strtol 似乎是最好的答案。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      一般来说,没有理由在 现代代码。

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          printf( "%08d", num);
          

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              也许 sscanf 是 %d 格式的?

              【讨论】:

                【解决方案9】:

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

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

                【讨论】:

                  【解决方案10】:
                  char num[] = "00905607";
                  int number;
                  
                  number = atoi(num);
                  printf("%0*d", (int)strlen(num), number);
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2018-08-08
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-11-13
                    • 2023-03-13
                    • 1970-01-01
                    • 2011-03-16
                    • 2011-05-15
                    相关资源
                    最近更新 更多