Страница 1 из 1

Преобразование типов (char to float) C/C++

Добавлено: 11 мар 2008, 10:06
Speccyfan
Здравствуйте!
Необходимо строку сконвертить в float, как это можно сделать на gcc ?
Везде натыкаюсь на функцию atof(), но это для борландовского Си, а мне же под пингвином надо. Обратное преобразование можно сделать при помощи sprintf, а вот для char to float никак нигде не найду примера.
Хелп плиз!

Добавлено: 11 мар 2008, 10:58
grub
Не спец по С... но не спасет ли тебя функция read или что-то вроде этого (смысл -- считать строку в переменную нужного тебе типа)?

В фортране (g95) такая хрень точно работает.

Добавлено: 11 мар 2008, 11:13
Speccyfan
Что-то я такого не найду ...

Добавлено: 11 мар 2008, 11:26
Victor Gr.
Speccyfan,

atof() определена в stdlib.h и есть в стандарте ANSI C.

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

#include <stdio>
#include <stdlib>

int main(void) {

    char * str = "3.1498";
    float    a = 0;

    printf ("%s\n", str);
    a = atof(str);
    printf ("%f\n", a);

    return 0;

}

Добавлено: 11 мар 2008, 12:00
Speccyfan
Спасибо! Что-то я затупил, мне казалось, что нету тут stdlib :)

Добавлено: 11 мар 2008, 15:32
exe

Добавлено: 20 мар 2008, 12:26
red f0x
...или банальный int scanf (const char* format, ...) с %lf в формате?

Re: Преобразование типов (char to float) C/C++

Добавлено: 06 апр 2008, 15:01
olecom
Speccyfan писал(а):Здравствуйте!
Необходимо строку сконвертить в float, как это можно сделать на gcc ?
Везде натыкаюсь на функцию atof(), но это для борландовского Си, а мне же под пингвином надо. Обратное преобразование можно сделать при помощи sprintf, а вот для char to float никак нигде не найду примера.
Хелп плиз!
Например в дебяне есть пакет http://packages.debian.org/manpages-dev . Поставив его и набрав

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

sh$ man atof
можно найти достаточно информации про эту конкретную функцию. В случае наличия интернета и отсуствия man системы, можно воспользоватся сервисом
http://kerneltrap.org/search/node/atof

Прошу обратить внимание, что atof() не детектирует ошибки (кривой ввод) и возвращает double.