КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Преобразование символьных строк
Способ 2. Способ 1. Очистка входного потока (буфера) после работы функции scanf() с помощью функции fflush(). Например, … scanf(“%d”, i); /*ввод целого числа*/ fflush(stdin); /*очистка входного потока от символа \n*/ … Теперь можно использовать функцию gets(). Не использовать функции ввода scanf() и gets() в одной программе. Рекомендуется использовать только функцию gets(), которая более удобна для выполнения конкретных задач. Ввод численных данных осуществляется в виде символьной строки с последующим преобразованием в числовой формат. Для реализации второго способа рассмотрим функции преобразования численных значений, заданных в виде символьной строки, в формат целых и вещественных переменных. Существуют функции преобразования строки в целое число (функция 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, необходимой для ввода и промежуточного хранения вводимых значений в формате символьной строки.
Дата добавления: 2014-01-07; Просмотров: 563; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |