叫我miniQ 发表于 2020-3-17 22:08:52

整型数字转化成字符串的函数(课后作业)

请问一下为什么要在转化后的每个字符后面加一个'0'才能正常输出呢?我一开始自己写的代码不加'0'就输出不了,看了小甲鱼的答案也不知道为什么一定要加这个
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';
                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;
}

sunrise085 发表于 2020-3-17 22:08:53

加'0'是将原来的数字转成该数字对应的ASCII码。
例如1的ASCII是十进制65,0的ASCII是十进制64,那么1+'0'就是1+64=65,就将数字转为所对应的ASCII码了,这样就是真正的字符串了

叫我miniQ 发表于 2020-3-17 22:11:11

就是23行那个地方

大肥侃子 发表于 2020-3-17 22:22:40

因为 num / dec 的结果是数字,加上 '0' 相当于加上它的 ASCII码 , 把它转化成字符的数字,基础不够牢哈。

叫我miniQ 发表于 2020-3-17 22:26:38

sunrise085 发表于 2020-3-17 22:17
加'0'是将原来的数字转成该数字对应的ASCII码。
例如1的ASCII是十进制65,0的ASCII是十进制64,那么1+'0'就 ...

还想问一下为什么每个都是加0对应到他本身的ASCII值呢?

叫我miniQ 发表于 2020-3-17 22:27:25

大肥侃子 发表于 2020-3-17 22:22
因为 num / dec 的结果是数字,加上 '0' 相当于加上它的 ASCII码 , 把它转化成字符的数字,基础不够牢哈。

谢谢你,还想问一下为什么每个都是加0对应到他本身的ASCII值呢?

大河之jian 发表于 2020-3-17 22:48:52

叫我miniQ 发表于 2020-3-17 22:27
谢谢你,还想问一下为什么每个都是加0对应到他本身的ASCII值呢?

因为字符0~9的ASCII值都是连续的

叫我miniQ 发表于 2020-3-17 23:17:46

大河之jian 发表于 2020-3-17 22:48
因为字符0~9的ASCII值都是连续的

谢谢了,我后来查了一下,刚好加上0的ASCII都是对应上的
页: [1]
查看完整版本: 整型数字转化成字符串的函数(课后作业)