weijun_zhang 发表于 2021-5-10 16:30:06

S1E29 课后动动手作业答疑

S1E29课后动动手第0题
0. 你应该听说过 itoa 函数(函数文档 -> 传送门),它的作用是将一个整数转换成字符串形式存储。现在要求我们自己来实现一个类似功能的函数 myitoa(int num, char *str),该函数的第一个参数是待转换的整型变量,第二参数传入一个字符指针,用于存放转换后的字符串。
我的代码如下,请问为何运行出来不对?我在纸上演算了,好像没啥问题啊?盼大神执教

#include <stdio.h>

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

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

      if (num < 0)
      {
                str = '-';
                num = -num;
      }
      temp=num;//取绝对值
      while(num!=0)   //判断数字有多少位
      {
              num=num/10;
              i++;
                }
      str = '\0';
      while(i!=0)//计算数字的绝对值的个十百千位,并赋给字符串变量str
      {
              i--;
                        str=(temp/dec)%10;
              dec=dec*10;
                }

      return str;
}

int main(void)
{
      char str;

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

      return 0;
}

人造人 发表于 2021-5-10 17:21:33

#include <stdio.h>

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

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

    int i = 0, dec=1;
    int temp;
    int x = 0;

    if (num < 0)
    {
      str = '-';
      num = -num;
      x = 1;
    }
    temp=num;//取绝对值
    while(num!=0)   //判断数字有多少位
    {
      num=num/10;
      i++;
    }
    str = '\0';
    while(i!=x)//计算数字的绝对值的个十百千位,并赋给字符串变量str
    {
      i--;
      //str=(temp/dec)%10;
      str=(temp/dec)%10 + '0';
      dec=dec*10;
    }

    return str;
}

int main(void)
{
    char str;

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

    return 0;
}

weijun_zhang 发表于 2021-5-10 18:04:33

人造人 发表于 2021-5-10 17:21


两个错误:1. 没有区分负数的时候,i!=0的情况;
                2.   str=(temp/dec)%10 + '0';          这里没太理解,为何一定要加‘0’?不加还不行呢,打出来是乱码的

人造人 发表于 2021-5-10 18:15:55

weijun_zhang 发表于 2021-5-10 18:04
两个错误:1. 没有区分负数的时候,i!=0的情况;
                2.   str=(temp/dec)%10 + '0';      ...

数字 0和字符 '0' 是完全不同的

#include <stdio.h>

int main(void) {
    printf("%d\n", '0');
    return 0;
}

48

也就是说
str=(temp/dec)%10 + '0';
str=(temp/dec)%10 + 48;
这两行代码是一样的
加一个 48 把数字变成字符
页: [1]
查看完整版本: S1E29 课后动动手作业答疑