c语言数值型转化为字符型,帮忙调一下
//将输入的数值型数据转化为字符型数
#include<stdio.h>
void main()
{
char s[50];
int p,k; //k为存放处里后的数的位置,p 标志整数位有没有数据
double x; //X为输入的数
long int d,m,n; //存放整数部分,d,n有相同的数据 //n与 X 整数部分想同的最小位数
for(;;)
{
k=p=0;n=1;
printf("input a number:");scanf("%lf",&x);
if(x==0){printf("the end\n");break;}
if(x<0){s[k]='-';x=-x;k++;}
d=m=x;x-=d;
if(d>0)
{
p=1;
while((m/=0)>0)n*=10;
do{s[k]=d/n+'0';k++;d%=n;n/=10;}while(n>0);/*整数*/
}
if(x>0)
{
if(p==0){s[k]='0';k++;}
s[k]='.';k++;n=0;
while(x-(long int)x>0&&n<6) //限制转化小数6位
{
n++;x*=10; //将小数转华为整数
}
d=m=(long int)x;n=1;
while((m/=10)>0)n*=10;
do{s[k]=d/n+'0';k++; d%=n;n/=10;}while(n>0);//小数部分
}
s[k]='\0';
printf("number string is %s\n",s);
}
}
参考答案:#include<stdio.h>
void main()
{
char s[50];
int p,k; //k为存放处里后的数的位置,p 标志整数位有没有数据
double x; //X为输入的数
long int d,m,n; //存放整数部分,d,n有相同的数据 //n与 X 整数部分想同的最小位数
for(;;)
{
k=p=0;n=1;
printf("input a number:");
scanf("%lf",&x);
if(x==0)
{
printf("the end\n");
break;
}
if(x<0)
{
s[k]='-';x=-x;k++;
}
d=m=x;x-=d;
if(d>0)
{
p=1;
while((m/=10)>0) //此处你是m/=0,当然错了!
n*=10;
do
{
s[k]=d/n+'0';
k++;
d%=n;
n/=10;
}while(n>0);/*整数*/
}
if(x>0)
{
if(p==0)
{
s[k]='0';
k++;
}
s[k]='.';k++;n=0;
while(x-(long int)x>0&&n<6) //限制转化小数6位
{
n++;x*=10; //将小数转华为整数
}
d=m=(long int)x;
n=1;
while((m/=10)>0)
n*=10;
do
{
s[k]=d/n+'0';
k++;
d%=n;
n/=10;
}while(n>0);//小数部分
}
s[k]='\0';
printf("number string is %s\n",s);
}
}