LINUX.ORG.RU

помогите со scanf


0

0

Какой-то бред со сканфом!
Машина AMD64 
gcc (GCC) 4.0.2 20051125 (Red Hat 4.0.2-8)

следующий код (все вычленено до минимума)

#include <stdio.h>

int main()
{
  float a,b;
  scanf("%f %f", &a,&b);
  printf("a=%f, b=%f\n",a,b);
  return 0;
}

Ввод: строка (например)

6080307.21592 5.27e+01

Вывод получается такой:

a=6080307.000000, b=52.700001

ЧТО ДЕЛАТЬ??? Из-за этого большая программа не работает. Семь потов сошло пока я понял где ошибка. Но исправить не знаю как. Исходный файл был со fscanf или со sscanf. Перейти к более простым функциям - много гемора, так как заранее неизвестно сколько колонок во входном файле - формат определяется на лету.

В Гугле я таких глюков не нашел. ПОЧЕМУ ОН ОКРУГЛЯЕТ ПЕРВУЮ ПЕРЕМЕННУЮ???
★★★

Вопрос снят переходом к double и %lf

atoku ★★★
() автор топика

Точность float - 7 знаков после запятой, double - 15.

Чем думают те кто использует float мне не понятно. Единственный плюс - выигрыш по памяти.

Reset ★★★★★
()

6080307.21592 представляется в памяти как
6.08030721592E+06 но так как уже было сказано что float хранит тока 5 знаков после запятой по получаем
6.08030Е+06 это иммено то что выдается printfом...

xerc
()

А что в спецификации нельзя задать?

Mr_Nobody
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.