#include <stdlib.h> double strtod(const char *start, char **end);
Функция strtod() преобразует строковое представление числа, которое содержится в строке, адресуемой параметром start, в значение типа double и возвращает полученный результат.
В версии С99 к параметрам start и end применен квалификатор restrict.
Функция strtod() работает следующим образом:
Сначала в строке, адресуемой параметром start, пропускаются пробелы, символы табуляции и пустой строки. Затем считываются символы, составляющие число. Когда считывается символ, который не может встречаться в записи числа с плавающей точкой, считывание прекращается. К таким символам относятся пробелы, символы табуляции и пустой строки, знаки препинания (но не точки) и символы, отличные от букв "Е" и "е". Наконец, параметр-указатель end устанавливается так, чтобы указывать на "неиспользованный" остаток исходной строки, если таковой существует. Это означает, что, если функция strtod() вызывается с аргументом
"100.00 плоскогубцев"
то она возвратит значение
100.00
а параметр-указатель end будет указывать на пробел, предшествующий слову
"плоскогубцев"
При возникновении переполнения функция strtod() возвращает либо значение HUGE_VAL, либо значение -HUGE_VAL (означающее положительное или отрицательное переполнение соответственно), а глобальная переменная errno устанавливается равной значению ERANGE, свидетельствующему об ошибке из-за выхода результата за пределы представимых чисел. При потере значимости возвращается нуль, а глобальная переменная errno устанавливается равной значению ERANGE. Если параметр start не указывает на число, никакого преобразования не выполняется и функция возвращает нуль.
Следующая программа читает числа с плавающей точкой из массива символов.
#include <stdlib.h> #include <ctype.h> #include <stdio.h> int main(void) { char *end, *start = "100.00 плоскогубцев 200.00 молотков"; end = start; while(*start) { printf("%f, ", strtod(start, &end)); printf("Остаток: %s\n" ,end); start = end; /* пропускает символы не входящие в числа */ while(!isdigit(*start) && *start) start++; } return 0; }
Вот что выводит эта программа:
100.000000, Остаток: плоскогубцев 200.00 молотков 200.000000, Остаток: молотков