Существуют функции преобразования строки в целое число (функция atoi( )), длинное целое (функция atol( )), в число с плавающей точкой двойной точности (функция atof( )) или длинное число с плавающей точкой (функция atold( )). Рассмотрим подробней каждую из функций преобразования.
Функция atoi( )
Функция преобразует символьную строку в целочисленный формат. Прототип функция описан в заголовочном файле stdlib.h и имеет следующую структуру:
int atoi(char *s);
где s – указатель на преобразуемую символьную строку.
Функция atoi( ) преобразует строку, на которую указывает указатель s, в целое число типа int.
Функция распознает символы в строке в следующем порядке:
· необязательная строка символов табуляции и пробелов;
· необязательный знак;
· строка цифр.
Число цифр, составляющих число, не должно превышать пяти, т.к. максимальное значение типа int – 32767.
Функция atoi( ) возвращает преобразованное значение входной строки. Если строка не может быть преобразована в число соответствующего типа (int), то возвращаемое значение равно 0. Например, результат преобразования строки «abcd» – 0.
Фрагмент программы
…
char *s1 = “1345”,
*s2 = “ -31”,
*s3 = “+97aBc”;
int i1, i2, i3;
i1 = atoi(s1);
i2 = atoi(s2);
i3 = atoi(s3);
printf(“i1 = %d i2 = %d i3 = %d”, i1, i2, i3);
…
позволит вывести численные значения переменных в следующем виде:
i1 = 1345 i2 = -31 i3 = 97
При обнаружении первого нераспознанного символа функция прекращает преобразование.
Функция atol( )
Функция atol( ) преобразует символьную строку в целое число типа long. Прототип функции описан в заголовочном файле stdlib.h и имеет следующую структуру:
long atol(char *s);
Функция atol( ) преобразует строку, на которую указывает указатель s, в число типа long.
Функция atol( ) полностью аналогична функции atoi( ) за исключением того, что количество цифр в формате строки значительно больше (до 10).
Если строка задает число вне диапазона –2147483648 – 2147483647, то наступает переполнение и результат преобразования непредсказуем.
Например,
…
long m;
char *pstr = “98765432”;
m = atol(pstr);
printf(“строка = %s; число типа long = %ld\n”, pstr, m);
…
Результат работы программы:
строка = 98765432; число типа long = 98765432
Отметим некоторые особенности данной программы. Переменная m имеет тип long, потому что принимает возвращаемое функцией atol( ) значение типа long. Функция printf( ) имеет для второго аргумента спецификатор ld, т. к. выводимое значение длинного типа.
Функции atof( ) и atold( )
Функция atof( ) преобразует строку в число типа double.
Прототип функции описан в заголовочном файле stdlib.h и имеет следующую структуру:
double atof (char *s);
Функция преобразует строку, на которую указывает указатель s, в число типа double.
Функция распознает символьное представление числа с плавающей точкой, составленной из следующих компонентов:
· необязательная строка знаков табуляции и пробелов;
· необязательный знак;
· строка цифр и необязательная десятичная точка, расположенная в любом месте этой строки;
· необязательный символ e (Е)юбдлщш98, за которым следует необязательное целое со знаком или без него.
Символьная строка должна иметь следующий общий формат:
[пробелы][знак][dd…d][.][dd…d][e или E][знак][dd…d]
ü Внимание ! Обязательно наличие целой составляющей числа или точки с десятичной частью.
Например,
“28”, “.589”, “12.5”, “ -.06”, “62.E2”, “-0.2e-2”, “.1e+5”.
При обнаружении первого нераспознаваемого символа функция atof( ) прекращает преобразование.
Например, строка “12.5R-02” преобразуется в число 12.5.
Иначе говоря, любой непреобразуемый символ выступает как символ окончания строки ‘\0’.
При переполнении функция atof( ) возвращает отрицательное или положительное значение HUGE_VAL (огромное значение), что позволяет идентифицировать строку переполнения.
Переполнение наступает, когда преобразованное значение по модулю выходит из диапазона 1.7E-308 1.7E308.
Функция atold( ) аналогична функции atof( ) за исключением того, что она возвращает значение типа long double, для хранения которого отводится 10 байт, а диапазон возможного представления по модулю 3.4E-4932 1.1E4932.
Например,
…
double x;
float y;
char *pstr1= “123.45”;
char *pstr2= “1.7E20”;
x=atof(pstr1);
y=atof(pstr2;
printf(“Строка1 = %s число = %f. \n Строка2 = %s число = %lf. \n”, x, y);
…
Методика ввода числовых данных с использованием функции gets( )
Функции преобразования символьной строки в числовой формат позволяют отказаться от использования в программе функции scanf( ).
Функция ввода gets( ) позволяет вводить числовые данные в формате символьной строки, которая может быть преобразована в соответствующий числовой формат.
Например, фрагмент программы
…
char buf[20];
int d;
float r;
printf(“Введите значение переменной d:”)
gets( buf );
d = atoi( buf );
printf(“Введите значение переменной r:”)
gets( buf );
r = atof( buf );
…
позволяет последовательно ввести значения целой переменной d и вещественной переменной r, посредством символьной строки buf, необходимой для ввода и промежуточного хранения вводимых значений в формате символьной строки.