一个关于浮点数用二进制表达的问题,求指教
程序代码:#include "stdio.h"
char a[32];
void changex(float x)//小数部分转换
{
int w=(int)(x*2);
if(x!=0)
{
if(w<10) printf("%d",w);
else printf("%c",'A'+w-10);
changex((x*2)-w);
}
else return;
}
change2(int a)//整数部分转换
{
int j,k;
if(a==0)
return 0;
else
{
j=a%2;
k=a/2;
change2(k);
printf("%d",j);
}
}
change()
{
int k,z;
float x,y;
printf("请输入一个数字:");
scanf("%f",&x);
if(x<0)
x=-x;
k=(int)(x);
change2(k);
z=(int)x,y=x-z;
if(y!=0)
{
printf(".");
changex(y);
}
}
void Init()//输入待转数的二进制数
{
int i;
printf("请输入您要转换的23位二进制数,位数不够的在前面补0:");
for(i=9;i<32;i++)
{
scanf("%c",&a[i]);
if(a[i]=='\n')
break;
}
}
void PrintYuanMa()
{
int i;
for(i=0;i<8;i++)
printf("%c",a[i]);
}
void PrintFanMa()
{
int i;
for(i=9;i<32;i++)
{
if(a[i]=='1')
printf("0");
if(a[i]=='0')
printf("1");
}
printf("\n");
}
void PrintBuMa()
{
int j;
if(a[0]=='1')
{
for(j=9;j<32;j++)
{
if(a[j]=='1')
a[j]='0';
else
a[j]='1';
}
a[0]='1';
int mark=0;int i;
for(i=31;i>=9;i--)
{
if(mark==1||i==31)
{
a[i]=a[i]+1;
if(a[i]=='2')
{
a[i]='0';
mark=1;
}
else
mark=0;
}
}
PrintYuanMa();
}
else
{
if(a[0]=='0')
{
PrintYuanMa();
}
}
}
void main()
{
char a[32];
change();
Init();
PrintBuMa();
}我想问的是,为什么我无法进行二次输入。就是当我的实数被转换成2进制后,为什么我的Init函数没有起到输入的功能。直接跳完了。









