Когда условие в строке 13 истинно, настало время добавить символ разделителя тысяч. Это условие можно прочесть как «если требуется группировка
loc.grouping указывает нужное для группировки количество После использования текущего положения в loc.grouping
jj (строка 16). С другой стороны, если в следующем положении CHAR_MAX, группировка должна быть прекращена, и строка 18 убирает ее, устанавливая quote_flag в false. В противном случае, следующее значение является значением группировки, поэтому строка 20 восстанавливает 0 в jj, а строка 21 увеличивает значение ii.Это низкоуровневый, подробный код. Однако, поняв один раз, как представляется информация в struct lconv
13.2.7. Форматирование значений даты и времени: ctime()
strftime()В разделе 6.1 «Времена и даты» описаны функции для получения и форматирования значений времени и даты. Функция strftime()
setlocale() была вызвана должным образом. Это демонстрирует следующая простая программа, ch13-times.с:/* ch13-times.c --- демонстрация времени на основе локали */
#include
#include
#include
int main(void) {
char buf[100];
time_t now;
struct tm *curtime;
setlocale(LC_ALL, "");
time(&now);
curtime = localtime(&now);
(void)strftime(buf, sizeof buf,
"It is now %A, %B %d, %Y, %I:%M %p", curtime);
printf("%s\n", buf);
printf("ctime() says: %s", ctime(&now));
exit(0);
}
При запуске программы мы видим, что результаты strftime()
ctime() — нет:$ LC_ALL=en_US ch13-times
It is now Friday, July 11, 2003, 10:35 AM
ctime() says: Fri Jul 11 10:35:55 2003
$ LC_ALL=it_IT ch13-times
It is now venerdi, luglio 11, 2003, 10:36
ctime() says: Fri Jul 11 10:36:00 2003
$ LC_ALL=fr_FR ch13-times
It is now vendredi, juillet 11, 2003, 10:36
ctime() says: Fri Jul 11 10:36:05 2003
Причина отсутствия изменений в том, что ctime()
asctime(), на которой основана ctime()) является традиционным интерфейсом; он существует для поддержки старого кода, strftime(), будучи более новым интерфейсом (первоначально разработанным для C89), свободен использовать локали.13.2.8. Другие данные локали: nl_langinfo()
Хотя ранее мы сказали, что API catgets()
nl_langinfo(). Она предоставляет дополнительные связанные с локалью сведения, помимо тех, которые доступны из struct lconv:#include
#include
char *nl_langinfo(nl_item item);
Заголовочный файл
nl_item. (Это скорее всего int или enum.) Параметр item является одной из именованных констант, определенных в . Возвращаемое значение является строкой, которую можно при необходимости использовать либо непосредственно, либо в качестве форматирующей строки для strftime().Доступная информация поступает из нескольких категорий локали. В табл. 13.3 перечислены константы элементов, соответствующие категории локали и их значения.
Таблица 13.3
. Значения элементов дляnl_langinfo()Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT