c语言用一个函数将一个数字转换成字符串,大神们看看哪儿错了。。谢谢了

#define max 10
void myprint(float n){
char str[max];
int i,x;
i=(int)n;
int k=0;
float j;
j=n-i;
while(i){
str[k]=i%10;
i=i/10;
k++;
}
while(1){
j=j*10;
x=(int)j;
if(x!=0){
str[k++]=x;
}
j=j-x;
if(j==0) break;
}
puts(str);
}

int main(int argc, char *argv[]) {
float n;
printf("enter n:");
scanf("%f",&n);
myprint(n);
return 0;
}

(1)c语言先写声明,后写语句。
i=(int)n; int k=0; float j; 要写成 int k=0; float j; i=(int)n;
(2)转换整数部分你用了: while(i){ str[k]=i%10; i=i/10; k++; }
数字到字符编码写错了,应改为:
while(i){ str[k]=i%10 + '0'; i=i/10; k++; }
得到的字符串结果是反序的,例如: 123.406; 你得到 str[] 里是 "321"。
这时,你要做反序工作:
例如:{ char t; for (i=0;i<k/2;i++) {t=str[i]; str[i]=str[k-i-1]; str[k-i-1]=t;}; }; (你需要验证一下,这里只是给你建议和提示)
(3)加入小数点字符: str[k]='.'; k++; 计数器k也加1
(4) 接下来做小数部分,注意,如果数字是0也要转换,
与整数部分同样,数字到字符编码 要 加 '0'.
把这句: if(x!=0){ str[k++]= x ; }
改为: str[k++]= x +'0'; 否则 123.406 变 123.46了。
(5) 题目是否要求考虑负数?
若要求,开始转换前要判断是否小于0,小于则 str[k]='-'; k++;
另外,#define max 10 位数够吗?不够应加大。
(6) 机器内的浮点数 有时是很长的数,输入的10进制变2进制,是化不完的。所以你的 if(j==0) break; 未必能做到 !
为何不用 sprintf(str,".....",n); 直接转换呢? 可用 %g 格式 或别的格式,一步到位?追问

才开始学,不是很熟,我有些地方改了还是出不来啊大佬,运行没结果输入后直接结束程序了。。限制字数就没复制粘贴了,请问下是怎么回事啊。。。

温馨提示:答案为网友推荐,仅供参考
相似回答