преобразование типов С
Добавлено: 03 май 2011, 16:10
дано вещественное число r и целое неотриц m . записать r в строку в формате :m по правилам форматного вывода ТР (например ввод -123.456 и 9 вывод -1.23е+02) проблема.. выдает не совсем то что надо.. помогите исправить ошибку
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
float r,r1;
unsigned k=0,i=0,n,m;
int j=0;
char s[1];
printf("Vvedite r: "); scanf("%r",&r);
printf("Vvedite m: "); scanf("%m",&m);
if(r>0) s[i++]=' ';
else
{
s[i++]='-';
r=-r;
}
n=r;
if(n>0)
{
while(n>9)
{
r/=10; j++;//j-счетчик знаков перед запятой
k++; n=r;
}
}
else
{
while(n==0)
{
r*=10; j++;
n=r;
}
}
s[i++]=n+'0'; s[i++]='.';
r=r-(int)r;
r *=10;
n=r;
r=r-(int)r;
r1=r;
r1=r1*10-(int)r1;
if(r1>=5) n++;
s[i++]=n+'0';
if (m>8)
{
m-=8;
for(m; m>1; m--)
{
r*=10;
n=r;
r=r-(int)r;
s[i++]=n+'0';
}
r*=10;
n=r;
r=r-(int)r;
r1=r;//r1=0.4499
r1=r1*10-(int)r1;
if(r1>=5) n++;
s[i++]=n+'0';
}
s[i++]='e';
if(k==1) s[i++]='+';
else s[i++]='-';
if(j<10)
{
s[i++]='0';
s[i++]=j+'0';
}
else
{
while(j>0)
{
s[i++]=j/10+'0';
j/=10;
}
}
s[i]='\0';
printf("%s",s);
}