ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4271
Скачиваний: 28
Часть III. Стандартная библиотека языка программирования C
386
char p_sign_posn; /* формат положительного денежного
значения:
0 — величина и символ денег заключаются в круглые скобки;
1 — знак минус предшествует величине и символу денег;
2 — знак минус следует после величины и символа денег;
3 — знак минус непосредственно предшествует символу денег;
4 — знак минус непосредственно следует за символом денег*/
char n_sign_posn; /* формат положительного денежного
значения:
0 — величина и символ денег заключаются в круглые скобки;
1 — знак плюс предшествует величине и символу денег;
2 — знак плюс следует после величины и символа денег;
3 — знак плюс непосредственно предшествует символу денег;
4 — знак плюс непосредственно следует за символом денег */
В структуре эти поля могут следовать в произвольном порядке.
Если в поле типа
char
структуры
lconv
установлено значение
CHAR_MAX
, то это значит, что для данной локализации это поле не
содержит смыслового значения. Заметим, что символическая
константа
CHAR_MAX
определена в заголовочном файле limits.h.
В табл. 33.1 приведены значения полей типа
char
и строки, на
которые указывают поля типа
char*
, для локальности
"C"
, а также
локальная категория каждого поля.
Таблица 33.1.
Форматы числовых данных в локальности
:"C"
Поле структуры
lconv
Значение
Локальная категория
currency_symbol
""
LC_MONETARY
decimal_point
"."
LC_NUMERIC
grouping
""
LC_NUMERIC
int_curr_symbol
""
LC_MONETARY
mon_decimal_point
""
LC_MONETARY
mon_grouping
""
LC_MONETARY
mon_thousands_sep
""
LC_MONETARY
negative_sign
""
LC_MONETARY
Глава 33. Поддержка локализации <locale.h>
387
Таблица 33.1
(окончание)
Поле структуры
lconv
Значение
Локальная категория
positive_sign
""
LC_MONETARY
thousands_sep
""
LC_NUMERIC
frac_digits
CHAR_MAX
LC_MONETARY
int_frac_digits
CHAR_MAX
LC_MONETARY
n_cs_precedes
CHAR_MAX
LC_MONETARY
n_sep_by_space
CHAR_MAX
LC_MONETARY
n_sign_posn
CHAR_MAX
LC_MONETARY
p_cs_precedes
CHAR_MAX
LC_MONETARY
p_sep_by_space
CHAR_MAX
LC_MONETARY
p_sign_posn
CHAR_MAX
LC_MONETARY
33.5. Определение
текущих форматов данных
Для определения форматов числовых и денежных данных, ис-
пользуемых в текущей локальности, предназначена функция
localeconv
, которая имеет следующий прототип:
struct lconv *localeconv(void);
Эта функция всегда возвращает указатель на структуру типа
lconv
, которая содержит требуемые форматы. Программа не
должна менять поля этой структуры.
В листинге 33.2 приведен пример использования функции
lconv
.
Листинг 33.2. Определение форматов данных
в текущей локальности
#include<stdio.h>
#include<locale.h>
Часть III. Стандартная библиотека языка программирования C
388
int main(void)
{
struct lconv *p;
p = localeconv();
printf("Decimal point: %s\n", p->decimal_point);
return 0;
}
Г Л А В А
34
Работа с датами
и временем <time.h>
Кроме типов данных и функций, используемых для обработки
дат и времени, в заголовочном файле time.h также определена
символическая константа
NULL
и тип данных
size_t
, которые опи-
саны в
гл. 20
.
34.1. Арифметические типы
для представления времени
Для числового представления количества тактовых или, другими
словами, синхронизирующих импульсов процессора предназначен
тип
clock_t
, который обычно определяется следующим образом:
typedef long clock_t;
Для числового представления календарного времени предназна-
чен тип
time_t
, который обычно определяется следующим обра-
зом:
typedef long time_t;
34.2. Структура для представления
календарного времени
Различные характеристики календарного времени хранятся в
структуре типа
tm
, которая обычно имеет следующий формат:
Часть III. Стандартная библиотека языка программирования C
390
struct tm
{
int tm_sec; /* секунда минуты - [0,59] */
int tm_min; /* минута часа - [0,59] */
int tm_hour; /* час дня - [0,23] */
int tm_mday; /* день месяца - [1,31] */
int tm_mon; /* месяц года - [0,11] */
int tm_year; /* год, начиная с 1900 года */
int tm_wday; /* день недели - [0,6] */
int tm_yday; /* день года - [0,365] */
int tm_isdst; /* перевод часов летом на час вперед */
};
Значения поля
tm_isdst
имеют следующий смысл:
положительное значение указывает на то, что летом часы пе-
реводятся на час вперед;
нулевое значение указывает на то, что летом часы не перево-
дятся;
отрицательное значение указывает на то, что относительно
перевода часов летом нет информации.
Заметим, что поля структуры типа
tm
могут располагаться в про-
извольном порядке. Кроме того, при конкретной реализации
в структуре
tm
могут быть и другие поля.
34.3. Определение времени работы
программы
Для определения количества тактовых импульсов процессора,
сгенерированных с начала работы программы, предназначена
функция
clock
, которая имеет следующий прототип:
clock_t clock(void);
В случае удачного завершения функция возвращает количество
тактовых импульсов, сгенерированных процессором с начала ра-
боты программы. Если среда исполнения не подсчитывает коли-
чество сгенерированных процессором тактовых импульсов, то
функция
clock
возвращает –1.