преобразование типов С

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
ТатьянаВладимировна
Сообщения: 1
Зарегистрирован: 03 май 2011, 16:06

дано вещественное число 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);
}
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

А почему бы сразу не использовать формат вывода для вещуственного числа?

Код: Выделить всё

  // Начало Ваше
#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];
    char acFormatStr [15];

    printf("Vvedite r: "); scanf("%r",&r);
    printf("Vvedite m: "); scanf("%m",&m);

 //- А вот тут почти сразу вывод
 // маленькая подготовка: формируем строку формата:
  sprintf (acFormatStr, "%%1.%df", m);
 // собственно вывод:
  printf (acFormatStr, r);
};
ggfyytyty
Сообщения: 11
Зарегистрирован: 24 окт 2012, 11:19
Откуда: Peru
Контактная информация:

Биржа Баннеров T&M.
http://w717.com
11 видов Рекламы.Купим ссылки/
Ответить