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;
} #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;
}
人造人 发表于 2021-5-10 17:21
两个错误:1. 没有区分负数的时候,i!=0的情况;
2. str=(temp/dec)%10 + '0'; 这里没太理解,为何一定要加‘0’?不加还不行呢,打出来是乱码的 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]