一轮江月明 发表于 2017-4-11 09:35:06

S1E29动动手第一题

本帖最后由 一轮江月明 于 2017-4-11 09:37 编辑

#include <stdio.h>

char *myitoa(int num, char *str);

char *myitoa(int num, char *str)
{
      int dec = 1;
      int i = 0;
      int temp;

      if (num < 0)
      {
                str = '-';
                num = -num;
      }

      temp = num;

      while (temp > 9)
      {
                dec *= 10;
                temp /= 10;
      }

      while (dec != 0)
      {
                str = num / dec +'0';//这里为什么要加‘0’呢?左边是char,右边是int,为什么可以这么转换呢?
                num = num % dec;
                dec /= 10;
      }

      str = '\0';

      return str;
}

int main(void)
{
      char str;

      printf("%s\n", myitoa(520, str));
      printf("%s\n", myitoa(-1234, str));

      return 0;
}


上面为什么要加‘0’呢?左边是char,右边是int,为什么可以这么转换呢?

lumber2388779 发表于 2017-4-11 10:08:19

你去查看下ASCII码表就知道 '0'的ASCII是0x31即 48 而随后1-9的ASCII码都是对应的'0'的ASCII值加上数字值,所以当你要将1-9的值转换成ASCII码,就是输出字符也是这个数字,只需要加上'0'的ASCII就可以了,或者改成加上48也是一样的

一轮江月明 发表于 2017-4-11 10:19:32

lumber2388779 发表于 2017-4-11 10:08
你去查看下ASCII码表就知道 '0'的ASCII是0x31即 48 而随后1-9的ASCII码都是对应的'0'的ASCII值加上数字值, ...

万分感谢!万分感谢!
页: [1]
查看完整版本: S1E29动动手第一题